From 165d3652ffb8399626c37e0f65b50560a1369bc5 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Thu, 18 Jan 2007 18:13:34 +0000 Subject: [PATCH] use GTK-specific GUI lock git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44245 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/app.cpp | 19 +++++++++++++------ src/unix/threadpsx.cpp | 8 ++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index 1aee54439b..97438c2575 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -247,18 +247,12 @@ static GPollFunc wxgs_poll_func; extern "C" { static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout ) { - gdk_threads_enter(); - - wxMutexGuiLeave(); g_mainThreadLocked = true; gint res = (*wxgs_poll_func)(ufds, nfds, timeout); - wxMutexGuiEnter(); g_mainThreadLocked = false; - gdk_threads_leave(); - return res; } } @@ -408,6 +402,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv) #if wxUSE_THREADS if (!g_thread_supported()) g_thread_init(NULL); + gdk_threads_init(); wxgs_poll_func = g_main_context_get_poll_func(NULL); g_main_context_set_poll_func(NULL, wxapp_poll_func); @@ -562,3 +557,15 @@ void wxApp::SuspendIdleCallback() wxAddEmissionHook(); } } + +#if wxUSE_THREADS +void wxMutexGuiEnter() +{ + gdk_threads_enter(); +} + +void wxMutexGuiLeave() +{ + gdk_threads_leave(); +} +#endif diff --git a/src/unix/threadpsx.cpp b/src/unix/threadpsx.cpp index ff291daa3f..ad7585062f 100644 --- a/src/unix/threadpsx.cpp +++ b/src/unix/threadpsx.cpp @@ -132,10 +132,12 @@ static wxMutex *gs_mutexDeleteThread = (wxMutex *)NULL; // gs_nThreadsBeingDeleted will have been deleted static wxCondition *gs_condAllDeleted = (wxCondition *)NULL; +#ifndef __WXGTK20__ // this mutex must be acquired before any call to a GUI function // (it's not inside #if wxUSE_GUI because this file is compiled as part // of wxBase) static wxMutex *gs_mutexGui = NULL; +#endif // when we wait for a thread to exit, we're blocking on a condition which the // thread signals in its SignalExit() method -- but this condition can't be a @@ -1624,8 +1626,10 @@ bool wxThreadModule::OnInit() gs_mutexAllThreads = new wxMutex(); +#ifndef __WXGTK20__ gs_mutexGui = new wxMutex(); gs_mutexGui->Lock(); +#endif gs_mutexDeleteThread = new wxMutex(); gs_condAllDeleted = new wxCondition(*gs_mutexDeleteThread); @@ -1678,9 +1682,11 @@ void wxThreadModule::OnExit() delete gs_mutexAllThreads; +#ifndef __WXGTK20__ // destroy GUI mutex gs_mutexGui->Unlock(); delete gs_mutexGui; +#endif // and free TLD slot (void)pthread_key_delete(gs_keySelf); @@ -1727,6 +1733,7 @@ static void DeleteThread(wxThread *This) } } +#ifndef __WXGTK20__ void wxMutexGuiEnter() { gs_mutexGui->Lock(); @@ -1736,6 +1743,7 @@ void wxMutexGuiLeave() { gs_mutexGui->Unlock(); } +#endif // ---------------------------------------------------------------------------- // include common implementation code