]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/threadpsx.cpp
Rename wxWebNavigationError to wxWebViewNavigationError and wxWebNavigationEvent...
[wxWidgets.git] / src / unix / threadpsx.cpp
index 13ad80722e991bd2ffe95087d7caf4eee451e863..22fefee76d267440e3ab5aaa46abe801a26219f3 100644 (file)
@@ -974,7 +974,17 @@ void wxThreadInternal::Wait()
     // if the thread we're waiting for is waiting for the GUI mutex, we will
     // deadlock so make sure we release it temporarily
     if ( wxThread::IsMain() )
+    {
+#ifdef __WXOSX__
+        // give the thread we're waiting for chance to do the GUI call
+        // it might be in, we don't do this conditionally as the to be waited on
+        // thread might have to acquire the mutex later but before terminating
+        if ( wxGuiOwnedByMainThread() )
+            wxMutexGuiLeave();
+#else
         wxMutexGuiLeave();
+#endif
+    }
 
     wxLogTrace(TRACE_THREADS,
                wxT("Starting to wait for thread %p to exit."),
@@ -1004,9 +1014,11 @@ void wxThreadInternal::Wait()
         }
     }
 
+#ifndef __WXOSX__
     // reacquire GUI mutex
     if ( wxThread::IsMain() )
         wxMutexGuiEnter();
+#endif
 }
 
 void wxThreadInternal::Pause()
@@ -1413,7 +1425,7 @@ wxThreadError wxThread::Resume()
 // exiting thread
 // -----------------------------------------------------------------------------
 
-wxThread::ExitCode wxThread::Wait()
+wxThread::ExitCode wxThread::Wait(wxThreadWait WXUNUSED(waitMode))
 {
     wxCHECK_MSG( This() != this, (ExitCode)-1,
                  wxT("a thread can't wait for itself") );
@@ -1426,7 +1438,7 @@ wxThread::ExitCode wxThread::Wait()
     return m_internal->GetExitCode();
 }
 
-wxThreadError wxThread::Delete(ExitCode *rc)
+wxThreadError wxThread::Delete(ExitCode *rc, wxThreadWait WXUNUSED(waitMode))
 {
     wxCHECK_MSG( This() != this, wxTHREAD_MISC_ERROR,
                  wxT("a thread can't delete itself") );
@@ -1441,6 +1453,8 @@ wxThreadError wxThread::Delete(ExitCode *rc)
 
     m_critsect.Leave();
 
+    OnDelete();
+
     switch ( state )
     {
         case STATE_NEW:
@@ -1475,10 +1489,10 @@ wxThreadError wxThread::Delete(ExitCode *rc)
             }
             //else: can't wait for detached threads
     }
-    
+
     if (state == STATE_NEW)
         return wxTHREAD_MISC_ERROR;
-            // for coherency with the MSW implementation, signal the user that 
+            // for coherency with the MSW implementation, signal the user that
             // Delete() was called on a thread which didn't start to run yet.
 
     return wxTHREAD_NO_ERROR;
@@ -1489,6 +1503,8 @@ wxThreadError wxThread::Kill()
     wxCHECK_MSG( This() != this, wxTHREAD_MISC_ERROR,
                  wxT("a thread can't kill itself") );
 
+    OnKill();
+
     switch ( m_internal->GetState() )
     {
         case STATE_NEW: