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

Warn in case of dangerous thread join patterns

parent 17e4415c
...@@ -301,7 +301,12 @@ static void vlc_object_destroy( vlc_object_t *p_this ) ...@@ -301,7 +301,12 @@ static void vlc_object_destroy( vlc_object_t *p_this )
/* If we are running on a thread, wait until it ends */ /* If we are running on a thread, wait until it ends */
if( p_priv->b_thread ) if( p_priv->b_thread )
{
msg_Warn (p_this->p_libvlc, /* do NOT use a dead object for logging! */
"object %d destroyed while thread alive (VLC might crash)",
p_this->i_object_id);
vlc_thread_join( p_this ); vlc_thread_join( p_this );
}
/* Call the custom "subclass" destructor */ /* Call the custom "subclass" destructor */
if( p_priv->pf_destructor ) if( p_priv->pf_destructor )
......
...@@ -695,7 +695,10 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line ...@@ -695,7 +695,10 @@ void __vlc_thread_join( vlc_object_t *p_this, const char * psz_file, int i_line
/* Make sure we do return if we are calling vlc_thread_join() /* Make sure we do return if we are calling vlc_thread_join()
* from the joined thread */ * from the joined thread */
if (pthread_equal (pthread_self (), p_priv->thread_id)) 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); i_ret = pthread_detach (p_priv->thread_id);
}
else else
i_ret = pthread_join (p_priv->thread_id, NULL); i_ret = pthread_join (p_priv->thread_id, NULL);
......
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