// 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 <sigh>, 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;
}
wxMutexGuiLeave();
bool isDetached = m_isDetached;
- long id = (long)GetId();
- wxLogTrace(TRACE_THREADS, _T("Starting to wait for thread %ld to exit."),
+#ifdef __VMS
+ long long id = (long long)GetId();
+#else
+ long id = (long)GetId();
+#endif
+ wxLogTrace(TRACE_THREADS, _T("Starting to wait for thread %ld to exit."),
id);
// wait until the thread terminates (we're blocking in _another_ thread,
int wxThread::GetCPUCount()
{
-#if defined(__LINUX__)
+#if defined(__LINUX__) && wxUSE_FFILE
// read from proc (can't use wxTextFile here because it's a special file:
// it has 0 size but still can be read from)
wxLogNull nolog;
m_isDetached = kind == wxTHREAD_DETACHED;
}
-wxThreadError wxThread::Create()
+wxThreadError wxThread::Create(unsigned int WXUNUSED(stackSize))
{
if ( m_internal->GetState() != STATE_NEW )
{
return m_internal->GetPriority();
}
+#ifdef __VMS
+unsigned long long wxThread::GetId() const
+{
+ return (unsigned long long)m_internal->GetId();
+#else
unsigned long wxThread::GetId() const
{
return (unsigned long)m_internal->GetId();
+#endif
}
// -----------------------------------------------------------------------------