]> git.sesse.net Git - vlc/commitdiff
vlc_thread_join: cannot join current thread
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Thu, 28 Aug 2008 20:58:00 +0000 (23:58 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Thu, 28 Aug 2008 21:06:20 +0000 (00:06 +0300)
vlc_join will cause the assertion failure with pthread.
On -unchanged- Windows, it (supposedly) deadlocks as it used to.

include/vlc_threads.h
src/misc/threads.c

index 8f60d75ca337a3d43ae114f10cd19efc7972bc7b..fa0fc7c4732f3619f2ea197be9cf4a308ace084b 100644 (file)
@@ -175,7 +175,7 @@ VLC_EXPORT( int, vlc_threadvar_create, (vlc_threadvar_t * , void (*) (void *) )
 VLC_EXPORT( void, vlc_threadvar_delete, (vlc_threadvar_t *) );
 VLC_EXPORT( int,  __vlc_thread_create, ( vlc_object_t *, const char *, int, const char *, void * ( * ) ( vlc_object_t * ), int, bool ) );
 VLC_EXPORT( int,  __vlc_thread_set_priority, ( vlc_object_t *, const char *, int, int ) );
-VLC_EXPORT( void, __vlc_thread_join,   ( vlc_object_t *, const char *, int ) );
+VLC_EXPORT( void, __vlc_thread_join,   ( vlc_object_t * ) );
 
 VLC_EXPORT( int, vlc_clone, (vlc_thread_t *, void * (*) (void *), void *, int) );
 VLC_EXPORT( void, vlc_cancel, (vlc_thread_t) );
@@ -727,6 +727,6 @@ static inline void barrier (void)
  * vlc_thread_join: wait until a thread exits
  *****************************************************************************/
 #define vlc_thread_join( P_THIS )                                           \
-    __vlc_thread_join( VLC_OBJECT(P_THIS), __FILE__, __LINE__ )
+    __vlc_thread_join( VLC_OBJECT(P_THIS) )
 
 #endif /* !_VLC_THREADS_H */
index 78efab1a84ed1d76900f1ab9233b2599e48a0239..4480e41de190d365e78bae6fb87d4aacec52fb7a 100644 (file)
@@ -794,21 +794,12 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
 /*****************************************************************************
  * vlc_thread_join: wait until a thread exits, inner version
  *****************************************************************************/
-void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line )
+void __vlc_thread_join( vlc_object_t *p_this )
 {
     vlc_object_internals_t *p_priv = vlc_internals( p_this );
-    int i_ret = 0;
 
 #if defined( LIBVLC_USE_PTHREAD )
-    /* 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))
-    {
-        msg_Warn (p_this, "joining the active thread (VLC might crash)");
-        i_ret = pthread_detach (p_priv->thread_id);
-    }
-    else
-        i_ret = vlc_join (p_priv->thread_id, NULL);
+    vlc_join (p_priv->thread_id, NULL);
 
 #elif defined( UNDER_CE ) || defined( WIN32 )
     HANDLE hThread;
@@ -824,8 +815,7 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
             DUPLICATE_SAME_ACCESS) )
     {
         p_priv->b_thread = false;
-        i_ret = GetLastError();
-        goto error;
+        return; /* We have a problem! */
     }
 
     vlc_join( p_priv->thread_id, NULL );
@@ -855,23 +845,12 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
                  (double)((user_time%(60*1000000))/1000000.0) );
     }
     CloseHandle( hThread );
-error:
 
 #else
-    i_ret = vlc_join( p_priv->thread_id, NULL );
+    vlc_join( p_priv->thread_id, NULL );
 
 #endif
 
-    if( i_ret )
-    {
-        errno = i_ret;
-        msg_Err( p_this, "thread_join(%lu) failed at %s:%d (%m)",
-                         (unsigned long)p_priv->thread_id, psz_file, i_line );
-    }
-    else
-        msg_Dbg( p_this, "thread %lu joined (%s:%d)",
-                         (unsigned long)p_priv->thread_id, psz_file, i_line );
-
     p_priv->b_thread = false;
 }