fix WakeUpIdle() when called from another thread while idle processing is in progress
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72829 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -143,29 +143,26 @@ bool wxApp::DoIdle()
|
||||
#if wxUSE_THREADS
|
||||
wxMutexLocker lock(m_idleMutex);
|
||||
#endif
|
||||
// if a new idle source was added during ProcessIdle
|
||||
if (m_idleSourceId != 0)
|
||||
|
||||
bool keepSource = false;
|
||||
// if a new idle source has not been added, either as a result of idle
|
||||
// processing above or by another thread calling WakeUpIdle()
|
||||
if (m_idleSourceId == 0)
|
||||
{
|
||||
// remove it
|
||||
g_source_remove(m_idleSourceId);
|
||||
m_idleSourceId = 0;
|
||||
}
|
||||
|
||||
// Pending events can be added asynchronously,
|
||||
// need to keep idle source if any have appeared
|
||||
if (HasPendingEvents())
|
||||
needMore = true;
|
||||
|
||||
// if more idle processing requested
|
||||
if (needMore)
|
||||
// if more idle processing was requested or pending events have appeared
|
||||
if (needMore || HasPendingEvents())
|
||||
{
|
||||
// keep this source installed
|
||||
m_idleSourceId = id_save;
|
||||
return true;
|
||||
keepSource = true;
|
||||
}
|
||||
// add hooks and remove this source
|
||||
else // add hooks and remove this source
|
||||
wx_add_idle_hooks();
|
||||
return false;
|
||||
}
|
||||
// else remove this source, leave new one installed
|
||||
// we must keep an idle source, otherwise a wakeup could be lost
|
||||
|
||||
return keepSource;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user