From: RĂ©mi Denis-Courmont Date: Thu, 28 Aug 2008 20:58:00 +0000 (+0300) Subject: vlc_thread_join: cannot join current thread X-Git-Tag: 1.0.0-pre1~3709 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=da9b4d4df337858b97f3841a50f7a8515d7d8f51;p=vlc vlc_thread_join: cannot join current thread vlc_join will cause the assertion failure with pthread. On -unchanged- Windows, it (supposedly) deadlocks as it used to. --- diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 8f60d75ca3..fa0fc7c473 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -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 */ diff --git a/src/misc/threads.c b/src/misc/threads.c index 78efab1a84..4480e41de1 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -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; }