]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/threadpsx.cpp
gtk 1.2.8 compilation fix
[wxWidgets.git] / src / unix / threadpsx.cpp
index c0a1a533a8c32b0ca0a014ac5bc503c97373e582..f0a19482a01340d443029899539ba8cc018a8cbb 100644 (file)
@@ -135,7 +135,7 @@ static pthread_key_t gs_keySelf;
 static size_t gs_nThreadsBeingDeleted = 0;
 
 // a mutex to protect gs_nThreadsBeingDeleted
 static size_t gs_nThreadsBeingDeleted = 0;
 
 // a mutex to protect gs_nThreadsBeingDeleted
-static pthread_mutex_t gs_mutexDeleteThread = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t gs_mutexDeleteThread;
 
 // and a condition variable which will be signaled when all
 // gs_nThreadsBeingDeleted will have been deleted
 
 // and a condition variable which will be signaled when all
 // gs_nThreadsBeingDeleted will have been deleted
@@ -725,7 +725,7 @@ void wxThreadInternal::Wait()
         wxMutexGuiLeave();
 
     bool isDetached = m_isDetached;
         wxMutexGuiLeave();
 
     bool isDetached = m_isDetached;
-    long id = GetId();
+    long id = (long)GetId();
     wxLogTrace(TRACE_THREADS, _T("Starting to wait for thread %ld to exit."),
                id);
 
     wxLogTrace(TRACE_THREADS, _T("Starting to wait for thread %ld to exit."),
                id);
 
@@ -749,7 +749,7 @@ void wxThreadInternal::Wait()
             //       we're cancelled inside pthread_join(), things will almost
             //       certainly break - but if we disable the cancellation, we
             //       might deadlock
             //       we're cancelled inside pthread_join(), things will almost
             //       certainly break - but if we disable the cancellation, we
             //       might deadlock
-            if ( pthread_join(id, &m_exitcode) != 0 )
+            if ( pthread_join((pthread_t)id, &m_exitcode) != 0 )
             {
                 wxLogError(_("Failed to join a thread, potential memory leak "
                              "detected - please restart the program"));
             {
                 wxLogError(_("Failed to join a thread, potential memory leak "
                              "detected - please restart the program"));
@@ -835,7 +835,9 @@ bool wxThread::IsMain()
 
 void wxThread::Yield()
 {
 
 void wxThread::Yield()
 {
+#ifdef HAVE_SCHED_YIELD
     sched_yield();
     sched_yield();
+#endif
 }
 
 void wxThread::Sleep(unsigned long milliseconds)
 }
 
 void wxThread::Sleep(unsigned long milliseconds)
@@ -1258,7 +1260,8 @@ wxThreadError wxThread::Kill()
 #if !HAVE_THREAD_CLEANUP_FUNCTIONS
                 ScheduleThreadForDeletion();
 
 #if !HAVE_THREAD_CLEANUP_FUNCTIONS
                 ScheduleThreadForDeletion();
 
-                OnExit();
+                // don't call OnExit() here, it can only be called in the
+                // threads context and we're in the context of another thread
 
                 DeleteThread(this);
 #endif // HAVE_THREAD_CLEANUP_FUNCTIONS
 
                 DeleteThread(this);
 #endif // HAVE_THREAD_CLEANUP_FUNCTIONS
@@ -1449,6 +1452,10 @@ bool wxThreadModule::OnInit()
     gs_mutexGui->Lock();
 #endif // wxUSE_GUI
 
     gs_mutexGui->Lock();
 #endif // wxUSE_GUI
 
+    // under Solaris we get a warning from CC when using
+    // PTHREAD_MUTEX_INITIALIZER, so do it dynamically
+    pthread_mutex_init(&gs_mutexDeleteThread, NULL);
+
     return TRUE;
 }
 
     return TRUE;
 }