Properly lock condVar, add timeout condition to prevent infinite loop when waiting for fillClipboard() to finish
This commit is contained in:
parent
6c11de6a22
commit
0d310a8464
|
@ -283,8 +283,16 @@ Client::leave()
|
||||||
&Client::sendClipboardThread,
|
&Client::sendClipboardThread,
|
||||||
NULL));
|
NULL));
|
||||||
// Bug #4735 - we can't leave() until fillClipboard()s all finish
|
// Bug #4735 - we can't leave() until fillClipboard()s all finish
|
||||||
while (!m_condData)
|
Stopwatch timer(true);
|
||||||
m_condVar->wait();
|
m_mutex->lock();
|
||||||
|
while (!m_condData) {
|
||||||
|
m_condVar->wait(timer, 0.5);
|
||||||
|
if (timer.getTime()>0.5) {
|
||||||
|
LOG((CLOG_DEBUG "timed out waiting for clipboard fill"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_mutex->unlock();
|
||||||
|
|
||||||
m_screen->leave();
|
m_screen->leave();
|
||||||
|
|
||||||
|
@ -791,8 +799,10 @@ Client::sendClipboardThread(void * data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// signal that fill is done
|
// signal that fill is done
|
||||||
|
m_mutex->lock();
|
||||||
m_condData = true;
|
m_condData = true;
|
||||||
m_condVar->signal();
|
m_condVar->signal();
|
||||||
|
m_mutex->unlock();
|
||||||
|
|
||||||
// send clipboards that we own and that have changed
|
// send clipboards that we own and that have changed
|
||||||
for (ClipboardID id = 0; id < kClipboardEnd; ++id) {
|
for (ClipboardID id = 0; id < kClipboardEnd; ++id) {
|
||||||
|
|
Loading…
Reference in New Issue