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

An object must not have a thread when it is destroyed

Assert rather than invoke a crashy work-around.
Also allow the type-specific cleanup function to join the thread.
parent d745c19b
...@@ -300,19 +300,13 @@ static void vlc_object_destroy( vlc_object_t *p_this ) ...@@ -300,19 +300,13 @@ static void vlc_object_destroy( vlc_object_t *p_this )
/* Send a kill to the object's thread if applicable */ /* Send a kill to the object's thread if applicable */
vlc_object_kill( p_this ); vlc_object_kill( p_this );
/* If we are running on a thread, wait until it ends */
if( p_priv->b_thread )
{
msg_Warn (p_this->p_libvlc, /* do NOT use a dead object for logging! */
"%s %d destroyed while thread alive (VLC might crash)",
p_this->psz_object_type, p_this->i_object_id);
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 )
p_priv->pf_destructor( p_this ); p_priv->pf_destructor( p_this );
/* Any thread must have been cleaned up at this point. */
assert( !p_priv->b_thread );
/* Destroy the associated variables, starting from the end so that /* Destroy the associated variables, starting from the end so that
* no memmove calls have to be done. */ * no memmove calls have to be done. */
while( p_priv->i_vars ) while( p_priv->i_vars )
......
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