From: RĂ©mi Denis-Courmont Date: Thu, 28 Aug 2008 20:57:08 +0000 (+0300) Subject: vlc_join: check for deadlock X-Git-Tag: 1.0.0-pre1~3710 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=0965ae7d651c32b206ed7aa92243d7fa497145c9;p=vlc vlc_join: check for deadlock --- diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 76bb135f0d..8f60d75ca3 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -179,7 +179,7 @@ VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t *, const char *, int ) ); VLC_EXPORT( int, vlc_clone, (vlc_thread_t *, void * (*) (void *), void *, int) ); VLC_EXPORT( void, vlc_cancel, (vlc_thread_t) ); -VLC_EXPORT( int, vlc_join, (vlc_thread_t, void **) ); +VLC_EXPORT( void, vlc_join, (vlc_thread_t, void **) ); VLC_EXPORT (void, vlc_control_cancel, (int cmd, ...)); #ifndef LIBVLC_USE_PTHREAD_CANCEL diff --git a/src/misc/threads.c b/src/misc/threads.c index a296b4b12c..78efab1a84 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -621,10 +621,12 @@ void vlc_cancel (vlc_thread_t thread_id) * @param p_result [OUT] pointer to write the thread return value or NULL * @return 0 on success, a standard error code otherwise. */ -int vlc_join (vlc_thread_t handle, void **result) +void vlc_join (vlc_thread_t handle, void **result) { #if defined( LIBVLC_USE_PTHREAD ) - return pthread_join (handle, result); + int val = pthread_join (handle, result); + if (val) + vlc_pthread_fatal ("joining thread", val, __FILE__, __LINE__); #elif defined( UNDER_CE ) || defined( WIN32 ) do @@ -636,15 +638,13 @@ int vlc_join (vlc_thread_t handle, void **result) if (result) *result = handle->data; free (handle); - return 0; #elif defined( HAVE_KERNEL_SCHEDULER_H ) int32_t exit_value; - ret = (B_OK == wait_for_thread( p_priv->thread_id, &exit_value )); - if( !ret && result ) + int val = (B_OK == wait_for_thread( p_priv->thread_id, &exit_value )); + if( !val && result ) *result = (void *)exit_value; - return ret; #endif }