]> git.saurik.com Git - wxWidgets.git/commitdiff
fix WakeUpIdle() when called from another thread while idle processing is in progress
authorPaul Cornett <paulcor@bullseye.com>
Wed, 31 Oct 2012 05:43:01 +0000 (05:43 +0000)
committerPaul Cornett <paulcor@bullseye.com>
Wed, 31 Oct 2012 05:43:01 +0000 (05:43 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72829 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/app.cpp

index 823da625a20580bf39a6fe6aae266f9549d09e2a..e8874286550170396f1bfd24578dfe58bb1b5757 100644 (file)
@@ -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)
-    {
-        // 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)
+    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)
     {
-        // keep this source installed
-        m_idleSourceId = id_save;
-        return true;
+        // if more idle processing was requested or pending events have appeared
+        if (needMore || HasPendingEvents())
+        {
+            // keep this source installed
+            m_idleSourceId = id_save;
+            keepSource = true;
+        }
+        else // add hooks and remove this source
+            wx_add_idle_hooks();
     }
-    // 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;
 }
 
 //-----------------------------------------------------------------------------