X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Fengine.c;h=2aa85d18dde10f3621fdca36d3f598face43d327;hb=575659cfe809f32a46dd584b214f541dbd8609c7;hp=152b48b18c7042a0dce1f2763278db880ea59932;hpb=d8059014cbe3ce58e12df71408e171d497a1dd31;p=vlc diff --git a/src/playlist/engine.c b/src/playlist/engine.c index 152b48b18c..2aa85d18dd 100644 --- a/src/playlist/engine.c +++ b/src/playlist/engine.c @@ -169,11 +169,14 @@ static void playlist_Destructor( vlc_object_t * p_this ) playlist_t * p_playlist = (playlist_t *)p_this; if( p_playlist->p_preparse ) + { vlc_object_release( p_playlist->p_preparse ); + } if( p_playlist->p_fetcher ) + { vlc_object_release( p_playlist->p_fetcher ); - + } msg_Dbg( p_this, "Destroyed" ); } @@ -487,12 +490,25 @@ void playlist_LastLoop( playlist_t *p_playlist ) playlist_ItemDelete( p_playlist->status.p_node ); p_playlist->status.p_node = NULL; } + if( p_playlist->status.p_item && + p_playlist->status.p_item->i_flags & PLAYLIST_REMOVE_FLAG ) + { + PL_DEBUG( "%s was marked for deletion, deleting", + PLI_NAME( p_playlist->status.p_item ) ); + playlist_ItemDelete( p_playlist->status.p_item ); + p_playlist->status.p_item = NULL; + } /* Core should have terminated all SDs before the playlist */ /* TODO: It fails to do so when not playing anything -- Courmisch */ playlist_ServicesDiscoveryKillAll( p_playlist ); playlist_MLDump( p_playlist ); + vlc_object_kill( p_playlist->p_preparse ); + vlc_thread_join( p_playlist->p_preparse ); + vlc_object_kill( p_playlist->p_fetcher ); + vlc_thread_join( p_playlist->p_fetcher ); + PL_LOCK; FOREACH_ARRAY( playlist_item_t *p_del, p_playlist->all_items ) free( p_del->pp_children ); @@ -593,6 +609,13 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) msleep( (i_activity+1) * 1000 ); vlc_object_lock( p_obj ); } + + for( int i = 0; i < p_obj->i_waiting; i++ ) + { + vlc_gc_decref( p_obj->pp_waiting[i] ); + REMOVE_ELEM( p_obj->pp_waiting, p_obj->i_waiting, 0 ); + } + vlc_object_unlock( p_obj ); } @@ -674,6 +697,13 @@ void playlist_FetcherLoop( playlist_fetcher_t *p_obj ) msleep( (i_activity+1) * 1000 ); vlc_object_lock( p_obj ); } + + for( int i = 0; i < p_obj->i_waiting; i++ ) + { + vlc_gc_decref( p_obj->pp_waiting[i] ); + REMOVE_ELEM( p_obj->pp_waiting, p_obj->i_waiting, 0 ); + } + vlc_object_unlock( p_obj ); }