using non-sleep version for GUI mutex, solves #12411

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65473 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2010-09-06 13:50:12 +00:00
parent d377e9fe75
commit a94c4b8529
3 changed files with 160 additions and 4 deletions

View File

@@ -134,10 +134,12 @@ static wxMutex *gs_mutexDeleteThread = NULL;
// gs_nThreadsBeingDeleted will have been deleted
static wxCondition *gs_condAllDeleted = NULL;
#ifndef __WXOSX__
// 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
@@ -1671,6 +1673,11 @@ bool wxThread::IsPaused() const
// wxThreadModule
//--------------------------------------------------------------------
#ifdef __WXOSX__
void wxOSXThreadModuleOnInit();
void wxOSXThreadModuleOnExit();
#endif
class wxThreadModule : public wxModule
{
public:
@@ -1697,8 +1704,12 @@ bool wxThreadModule::OnInit()
gs_mutexAllThreads = new wxMutex();
#ifdef __WXOSX__
wxOSXThreadModuleOnInit();
#else
gs_mutexGui = new wxMutex();
gs_mutexGui->Lock();
#endif
gs_mutexDeleteThread = new wxMutex();
gs_condAllDeleted = new wxCondition(*gs_mutexDeleteThread);
@@ -1751,9 +1762,13 @@ void wxThreadModule::OnExit()
delete gs_mutexAllThreads;
#ifdef __WXOSX__
wxOSXThreadModuleOnExit();
#else
// destroy GUI mutex
gs_mutexGui->Unlock();
delete gs_mutexGui;
#endif
// and free TLD slot
(void)pthread_key_delete(gs_keySelf);
@@ -1801,6 +1816,8 @@ static void DeleteThread(wxThread *This)
}
}
#ifndef __WXOSX__
void wxMutexGuiEnterImpl()
{
gs_mutexGui->Lock();
@@ -1811,6 +1828,8 @@ void wxMutexGuiLeaveImpl()
gs_mutexGui->Unlock();
}
#endif
// ----------------------------------------------------------------------------
// include common implementation code
// ----------------------------------------------------------------------------