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

playlist: release video outputs *once* - fixes #1593

Releasing other thread's references is not a very good idea...
parent c2c6729b
...@@ -181,8 +181,6 @@ static void playlist_Destructor( vlc_object_t * p_this ) ...@@ -181,8 +181,6 @@ static void playlist_Destructor( vlc_object_t * p_this )
/* Destroy remaining objects */ /* Destroy remaining objects */
static void ObjectGarbageCollector( playlist_t *p_playlist, bool b_force ) static void ObjectGarbageCollector( playlist_t *p_playlist, bool b_force )
{ {
vlc_object_t *p_obj;
if( !b_force ) if( !b_force )
{ {
if( mdate() - p_playlist->gc_date < 1000000 ) if( mdate() - p_playlist->gc_date < 1000000 )
...@@ -195,15 +193,15 @@ static void ObjectGarbageCollector( playlist_t *p_playlist, bool b_force ) ...@@ -195,15 +193,15 @@ static void ObjectGarbageCollector( playlist_t *p_playlist, bool b_force )
} }
vlc_mutex_lock( &p_playlist->gc_lock ); vlc_mutex_lock( &p_playlist->gc_lock );
while( ( p_obj = vlc_object_find( p_playlist->p_libvlc, VLC_OBJECT_VOUT, /* Remove video outputs when user presses stop: */
FIND_CHILD ) ) ) vlc_list_t *list = vlc_list_find( p_playlist->p_libvlc, VLC_OBJECT_VOUT,
FIND_CHILD );
if( list != NULL )
{ {
vlc_object_release( p_obj ); msg_Dbg( p_playlist, "removing %u vout(s)", list->i_count );
if( p_obj->p_parent == VLC_OBJECT(p_playlist->p_libvlc) ) for( int i = 0; i < list->i_count; i++)
{ vlc_object_release( list->p_values[i].p_object );
msg_Dbg( p_playlist, "garbage collector destroying 1 vout" ); vlc_list_release( list );
vlc_object_release( p_obj ); /* Hmm, is this (thread-)safe?? */
}
} }
p_playlist->b_cant_sleep = false; p_playlist->b_cant_sleep = false;
vlc_mutex_unlock( &p_playlist->gc_lock ); vlc_mutex_unlock( &p_playlist->gc_lock );
......
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