Commit 0965ae7d authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

vlc_join: check for deadlock

parent 1014a2aa
......@@ -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
......
......@@ -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
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment