diff --git a/wxGTK-2.8.7-race-fix.patch b/wxGTK-2.8.7-race-fix.patch
new file mode 100644
index 0000000..c58f395
--- /dev/null
+++ b/wxGTK-2.8.7-race-fix.patch
@@ -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;
+
diff --git a/wxGTK.spec b/wxGTK.spec
index 0c0f330..ea0f545 100644
--- a/wxGTK.spec
+++ b/wxGTK.spec
@@ -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)