Fix media library's input items reference counting
authorRafaël Carré <funman@videolan.org>
Tue, 1 Apr 2008 19:12:34 +0000 (21:12 +0200)
committerRafaël Carré <funman@videolan.org>
Tue, 1 Apr 2008 19:13:08 +0000 (21:13 +0200)
src/playlist/engine.c
src/playlist/loadsave.c

index 5dc8257..0529d75 100644 (file)
@@ -396,6 +396,15 @@ check_input:
     PL_UNLOCK;
 }
 
+static void ML_Decref( playlist_item_t *p_node )
+{
+    vlc_gc_decref( p_node->p_input );
+
+    int i;
+    if( p_node->i_children > 0 )
+        for( i = 0 ; i < p_node->i_children ; i++ )
+            ML_Decref( p_node->pp_children[i] );
+}
 
 /**
  * Last loop
@@ -476,6 +485,8 @@ void playlist_LastLoop( playlist_t *p_playlist )
     }
 
     playlist_MLDump( p_playlist );
+    /* We don't need the media library anymore */
+    ML_Decref( p_playlist->p_ml_category );
 
     PL_LOCK;
     FOREACH_ARRAY( playlist_item_t *p_del, p_playlist->all_items )
index f3b97cd..830a0d1 100644 (file)
@@ -180,8 +180,6 @@ int playlist_MLLoad( playlist_t *p_playlist )
     vlc_event_detach( &p_input->event_manager, vlc_InputItemSubItemAdded,
                         input_item_subitem_added, p_playlist );
 
-    vlc_gc_decref( p_input );
-
     free( psz_uri );
     return VLC_SUCCESS;