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:
@@ -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
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user