- added fix for a race condition (rh bug #440011)

This commit is contained in:
Dan Horák 2008-04-01 12:56:47 +00:00
parent 33a282fdf7
commit 2c4c222853
2 changed files with 115 additions and 1 deletions

109
wxGTK-2.8.7-race-fix.patch Normal file
View File

@ -0,0 +1,109 @@
--- 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;

View File

@ -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 @@ License: wxWidgets Library Licence
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 @@ libraries or the X Window System.
%prep
%setup -q
%patch0 -p1 -b .racefix
sed -i -e 's|/usr/lib\b|%{_libdir}|' wx-config.in configure
@ -262,6 +264,9 @@ rm -rf $RPM_BUILD_ROOT
%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@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)