From 6914f254c1c18fee1afd2cda6fdeb5a60a71e9dc Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 10 Jan 2009 19:42:48 +0200 Subject: [PATCH] Remove playlist items when destroying the playlist... ...rather than when disabling it. Otherwise service discovery plugins cannot possibly cleanup after themselves (and CABOOM). --- src/playlist/engine.c | 18 ++++++++++++++++++ src/playlist/thread.c | 16 ---------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/playlist/engine.c b/src/playlist/engine.c index e1e9e11deb..b6f82ed12a 100644 --- a/src/playlist/engine.c +++ b/src/playlist/engine.c @@ -181,6 +181,24 @@ static void playlist_Destructor( vlc_object_t * p_this ) assert( !p_sys->p_fetcher ); vlc_cond_destroy( &p_sys->signal ); + + /* Remove all remaining items */ + FOREACH_ARRAY( playlist_item_t *p_del, p_playlist->all_items ) + free( p_del->pp_children ); + vlc_gc_decref( p_del->p_input ); + free( p_del ); + FOREACH_END(); + ARRAY_RESET( p_playlist->all_items ); + FOREACH_ARRAY( playlist_item_t *p_del, p_sys->items_to_delete ) + free( p_del->pp_children ); + vlc_gc_decref( p_del->p_input ); + free( p_del ); + FOREACH_END(); + ARRAY_RESET( p_sys->items_to_delete ); + + ARRAY_RESET( p_playlist->items ); + ARRAY_RESET( p_playlist->current ); + msg_Dbg( p_this, "Destroyed" ); } diff --git a/src/playlist/thread.c b/src/playlist/thread.c index 1d1a724478..b2ad6768f1 100644 --- a/src/playlist/thread.c +++ b/src/playlist/thread.c @@ -118,22 +118,6 @@ void playlist_Deactivate( playlist_t *p_playlist ) /* Release the current item */ set_current_status_item( p_playlist, NULL ); - FOREACH_ARRAY( playlist_item_t *p_del, p_playlist->all_items ) - free( p_del->pp_children ); - vlc_gc_decref( p_del->p_input ); - free( p_del ); - FOREACH_END(); - ARRAY_RESET( p_playlist->all_items ); - FOREACH_ARRAY( playlist_item_t *p_del, p_sys->items_to_delete ) - free( p_del->pp_children ); - vlc_gc_decref( p_del->p_input ); - free( p_del ); - FOREACH_END(); - ARRAY_RESET( p_sys->items_to_delete ); - - ARRAY_RESET( p_playlist->items ); - ARRAY_RESET( p_playlist->current ); - PL_UNLOCK; msg_Dbg( p_playlist, "Deactivated" ); -- 2.39.2