X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/918dc51991e5eaa5608d38cd8b7b3d251244d92b..672456655288ae8bfd67ab7047adffef6b959d77:/src/unix/threadpsx.cpp?ds=sidebyside diff --git a/src/unix/threadpsx.cpp b/src/unix/threadpsx.cpp index 113c85a3b2..d6e805347f 100644 --- a/src/unix/threadpsx.cpp +++ b/src/unix/threadpsx.cpp @@ -21,11 +21,12 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "thread.h" #endif -#include "wx/defs.h" +// for compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" #if wxUSE_THREADS @@ -122,10 +123,10 @@ static wxMutex *gs_mutexDeleteThread = (wxMutex *)NULL; // gs_nThreadsBeingDeleted will have been deleted static wxCondition *gs_condAllDeleted = (wxCondition *)NULL; -#if wxUSE_GUI - // this mutex must be acquired before any call to a GUI function - static wxMutex *gs_mutexGui; -#endif // wxUSE_GUI +// 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 @@ -166,6 +167,12 @@ private: friend class wxConditionInternal; }; +#ifdef HAVE_PTHREAD_MUTEXATTR_T +// on some systems pthread_mutexattr_settype() is not in the headers (but it is +// in the library, otherwise we wouldn't compile this code at all) +extern "C" int pthread_mutexattr_settype(pthread_mutexattr_t *, int); +#endif + wxMutexInternal::wxMutexInternal(wxMutexType mutexType) { int err; @@ -1610,11 +1617,8 @@ bool wxThreadModule::OnInit() gs_tidMain = pthread_self(); -#if wxUSE_GUI gs_mutexGui = new wxMutex(); - gs_mutexGui->Lock(); -#endif // wxUSE_GUI gs_mutexDeleteThread = new wxMutex(); gs_condAllDeleted = new wxCondition( *gs_mutexDeleteThread ); @@ -1659,12 +1663,9 @@ void wxThreadModule::OnExit() gs_allThreads[0]->Delete(); } -#if wxUSE_GUI // destroy GUI mutex gs_mutexGui->Unlock(); - delete gs_mutexGui; -#endif // wxUSE_GUI // and free TLD slot (void)pthread_key_delete(gs_keySelf); @@ -1713,16 +1714,12 @@ static void DeleteThread(wxThread *This) void wxMutexGuiEnter() { -#if wxUSE_GUI gs_mutexGui->Lock(); -#endif // wxUSE_GUI } void wxMutexGuiLeave() { -#if wxUSE_GUI gs_mutexGui->Unlock(); -#endif // wxUSE_GUI } // ----------------------------------------------------------------------------