- added fix for a race condition (rh bug #440011)
This commit is contained in:
parent
33a282fdf7
commit
2c4c222853
109
wxGTK-2.8.7-race-fix.patch
Normal file
109
wxGTK-2.8.7-race-fix.patch
Normal 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;
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user