X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7a56de34aba1bfe923f133986a0ca88fcbdd77e0..4b1f6faaa2c062d0797ae85c66ebe2c927946992:/src/unix/threadpsx.cpp diff --git a/src/unix/threadpsx.cpp b/src/unix/threadpsx.cpp index a56b6f751c..8207ca3576 100644 --- a/src/unix/threadpsx.cpp +++ b/src/unix/threadpsx.cpp @@ -166,10 +166,23 @@ wxMutex::wxMutex() // support recursive locks like Win32, i.e. a thread can lock a mutex which // it had itself already locked + // + // but initialization of recursive mutexes is non portable , so try + // several methods +#ifdef HAVE_PTHREAD_MUTEXATTR_T pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&(m_internal->m_mutex), &attr); +#elif defined(HAVE_PTHREAD_RECURSIVE_MUTEX_INITIALIZER) + // we can use this only as initializer so we have to assign it first to a + // temp var - assigning directly to m_mutex wouldn't even compile + pthread_mutex_t mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; + m_internal->m_mutex = mutex; +#else // no recursive mutexes + pthread_mutex_init(&(m_internal->m_mutex), NULL); +#endif // HAVE_PTHREAD_MUTEXATTR_T/... m_locked = 0; }