rpms/wxGTK/devel wxGTK-2.8.7-race-fix.patch, NONE, 1.1 wxGTK.spec, 1.37, 1.38

Dan Horak (sharkcz) fedora-extras-commits at redhat.com
Tue Apr 1 12:57:29 UTC 2008


Author: sharkcz

Update of /cvs/pkgs/rpms/wxGTK/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv28168

Modified Files:
	wxGTK.spec 
Added Files:
	wxGTK-2.8.7-race-fix.patch 
Log Message:
* Tue Apr  1 2008 Dan Horak <dan[at]danny.cz> - 2.8.7-2
- added fix for a race condition (rh bug #440011)


wxGTK-2.8.7-race-fix.patch:

--- NEW FILE wxGTK-2.8.7-race-fix.patch ---
--- wxWidgets/src/gtk/app.cpp	2008/03/13 02:56:21	52464
+++ wxWidgets/src/gtk/app.cpp	2008/03/13 04:37:03	52465
@@ -174,59 +174,63 @@
     if (!wxTheApp)
         return false;
 
-    bool moreIdles = false;
-
+    guint idleID_save;
+    {
+        // Allow another idle source to be added while this one is busy.
+        // Needed if an idle event handler runs a new event loop,
+        // for example by showing a dialog.
+#if wxUSE_THREADS
+        wxMutexLocker lock(gs_idleTagsMutex);
+#endif
+        idleID_save = wxTheApp->m_idleTag;
+        wxTheApp->m_idleTag = 0;
+        g_isIdle = true;
+        wxAddEmissionHook();
+    }
 #ifdef __WXDEBUG__
     // don't generate the idle events while the assert modal dialog is shown,
     // this matches the behavior of wxMSW
-    if (!wxTheApp->IsInAssert())
+    if (wxTheApp->IsInAssert())
+        return false;
 #endif // __WXDEBUG__
-    {
-        guint idleID_save;
-        {
-            // Allow another idle source to be added while this one is busy.
-            // Needed if an idle event handler runs a new event loop,
-            // for example by showing a dialog.
-#if wxUSE_THREADS
-            wxMutexLocker lock(gs_idleTagsMutex);
-#endif
-            idleID_save = wxTheApp->m_idleTag;
-            wxTheApp->m_idleTag = 0;
-            g_isIdle = true;
-            wxAddEmissionHook();
-        }
 
-        // When getting called from GDK's time-out handler
-        // we are no longer within GDK's grab on the GUI
-        // thread so we must lock it here ourselves.
-        gdk_threads_enter();
-
-        // Send idle event to all who request them as long as
-        // no events have popped up in the event queue.
-        do {
-            moreIdles = wxTheApp->ProcessIdle();
-        } while (moreIdles && gtk_events_pending() == 0);
+    // When getting called from GDK's time-out handler
+    // we are no longer within GDK's grab on the GUI
+    // thread so we must lock it here ourselves.
+    gdk_threads_enter();
 
-        // Release lock again
-        gdk_threads_leave();
-        
-        {
-            // If another idle source was added, remove it
+    // Send idle event to all who request them as long as
+    // no events have popped up in the event queue.
+    bool moreIdles;
+    do {
+        moreIdles = wxTheApp->ProcessIdle();
+    } while (moreIdles && gtk_events_pending() == 0);
+
+    // Release lock again
+    gdk_threads_leave();
+    
 #if wxUSE_THREADS
-            wxMutexLocker lock(gs_idleTagsMutex);
+    wxMutexLocker lock(gs_idleTagsMutex);
 #endif
-            if (wxTheApp->m_idleTag != 0)
-                g_source_remove(wxTheApp->m_idleTag);
-            wxTheApp->m_idleTag = idleID_save;
-            g_isIdle = false;
-        }
-    }
+    // If another idle source was added, remove it
+    if (wxTheApp->m_idleTag != 0)
+        g_source_remove(wxTheApp->m_idleTag);
+    wxTheApp->m_idleTag = idleID_save;
+    g_isIdle = false;
 
-    if (!moreIdles)
-    {
 #if wxUSE_THREADS
-        wxMutexLocker lock(gs_idleTagsMutex);
+    if (wxPendingEventsLocker)
+        wxPendingEventsLocker->Enter();
 #endif
+    // Pending events can be added asynchronously,
+    // need to keep idle source if any have appeared
+    moreIdles = moreIdles || (wxPendingEvents && !wxPendingEvents->IsEmpty());
+#if wxUSE_THREADS
+    if (wxPendingEventsLocker)
+        wxPendingEventsLocker->Leave();
+#endif
+    if (!moreIdles)
+    {
         // Indicate that we are now in idle mode and event handlers
         // will have to reinstall the idle handler again.
         g_isIdle = true;



Index: wxGTK.spec
===================================================================
RCS file: /cvs/pkgs/rpms/wxGTK/devel/wxGTK.spec,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- wxGTK.spec	20 Feb 2008 21:39:03 -0000	1.37
+++ wxGTK.spec	1 Apr 2008 12:56:47 -0000	1.38
@@ -6,7 +6,7 @@
 
 Name:           wxGTK
 Version:        2.8.7
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        GTK2 port of the wxWidgets GUI library
 # The wxWindows licence is the LGPL with a specific exemption allowing
 # distribution of derived binaries under any terms. (This will eventually
@@ -15,6 +15,7 @@
 Group:          System Environment/Libraries
 URL:            http://www.wxwidgets.org/
 Source0:        http://dl.sf.net/wxwindows/%{name}-%{version}.tar.bz2
+Patch0:         wxGTK-2.8.7-race-fix.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
@@ -121,6 +122,7 @@
 
 %prep
 %setup -q
+%patch0 -p1 -b .racefix
 
 sed -i -e 's|/usr/lib\b|%{_libdir}|' wx-config.in configure
 
@@ -262,6 +264,9 @@
 
 
 %changelog
+* Tue Apr  1 2008 Dan Horak <dan[at]danny.cz> - 2.8.7-2
+- added fix for a race condition (rh bug #440011)
+
 * Wed Feb 20 2008 Matthew Miller <mattdm at mattdm.org> - 2.8.7-1
 - update to 2.8.7 (rh bug #369621, etc.)
 - split base libs into separate wxBase package (rh bug #357961)




More information about the fedora-extras-commits mailing list