git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44245
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
extern "C" {
static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout )
{
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);
g_mainThreadLocked = true;
gint res = (*wxgs_poll_func)(ufds, nfds, timeout);
g_mainThreadLocked = false;
g_mainThreadLocked = false;
#if wxUSE_THREADS
if (!g_thread_supported())
g_thread_init(NULL);
#if wxUSE_THREADS
if (!g_thread_supported())
g_thread_init(NULL);
wxgs_poll_func = g_main_context_get_poll_func(NULL);
g_main_context_set_poll_func(NULL, wxapp_poll_func);
wxgs_poll_func = g_main_context_get_poll_func(NULL);
g_main_context_set_poll_func(NULL, wxapp_poll_func);
+
+#if wxUSE_THREADS
+void wxMutexGuiEnter()
+{
+ gdk_threads_enter();
+}
+
+void wxMutexGuiLeave()
+{
+ gdk_threads_leave();
+}
+#endif
// gs_nThreadsBeingDeleted will have been deleted
static wxCondition *gs_condAllDeleted = (wxCondition *)NULL;
// gs_nThreadsBeingDeleted will have been deleted
static wxCondition *gs_condAllDeleted = (wxCondition *)NULL;
// 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;
// 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;
// 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
// 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
gs_mutexAllThreads = new wxMutex();
gs_mutexAllThreads = new wxMutex();
gs_mutexGui = new wxMutex();
gs_mutexGui->Lock();
gs_mutexGui = new wxMutex();
gs_mutexGui->Lock();
gs_mutexDeleteThread = new wxMutex();
gs_condAllDeleted = new wxCondition(*gs_mutexDeleteThread);
gs_mutexDeleteThread = new wxMutex();
gs_condAllDeleted = new wxCondition(*gs_mutexDeleteThread);
delete gs_mutexAllThreads;
delete gs_mutexAllThreads;
// destroy GUI mutex
gs_mutexGui->Unlock();
delete gs_mutexGui;
// destroy GUI mutex
gs_mutexGui->Unlock();
delete gs_mutexGui;
// and free TLD slot
(void)pthread_key_delete(gs_keySelf);
// and free TLD slot
(void)pthread_key_delete(gs_keySelf);
void wxMutexGuiEnter()
{
gs_mutexGui->Lock();
void wxMutexGuiEnter()
{
gs_mutexGui->Lock();
{
gs_mutexGui->Unlock();
}
{
gs_mutexGui->Unlock();
}
// ----------------------------------------------------------------------------
// include common implementation code
// ----------------------------------------------------------------------------
// include common implementation code