threads: Make sure we vlc_thread_join() won't block when run from joined thread using...
authorPierre d'Herbemont <pdherbemont@videolan.org>
Tue, 25 Mar 2008 23:39:59 +0000 (00:39 +0100)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Wed, 26 Mar 2008 16:36:04 +0000 (17:36 +0100)
Signed-off-by: RĂ©mi Denis-Courmont
src/misc/threads.c

index 23dcf71..633e063 100644 (file)
@@ -834,8 +834,12 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
     i_ret = (B_OK == wait_for_thread( p_priv->thread_id, &exit_value ));
 
 #elif defined( LIBVLC_USE_PTHREAD )
     i_ret = (B_OK == wait_for_thread( p_priv->thread_id, &exit_value ));
 
 #elif defined( LIBVLC_USE_PTHREAD )
-    i_ret = pthread_join( p_priv->thread_id, NULL );
-
+    /* Make sure we do return if we are calling vlc_thread_join()
+     * from the joined thread */
+    if (pthread_equal (pthread_self (), p_priv->thread_id))
+        i_ret = pthread_detach (p_priv->thread_id);
+    else
+        i_ret = pthread_join (p_priv->thread_id, NULL);
 #endif
 
     if( i_ret )
 #endif
 
     if( i_ret )