]> git.sesse.net Git - vlc/commitdiff
input_item_node_Delete: fix leakage and lessen complexity
authorJakob Leben <jleben@videolan.org>
Tue, 2 Feb 2010 07:31:42 +0000 (08:31 +0100)
committerJakob Leben <jleben@videolan.org>
Tue, 2 Feb 2010 07:37:55 +0000 (08:37 +0100)
src/input/item.c

index a16cf7993ed60b21777cfcb750f83143eee201da..454aba1d84015be01859a988ea802584a954eb9e 100644 (file)
@@ -998,15 +998,21 @@ input_item_node_t *input_item_node_Create( input_item_t *p_input )
     return p_node;
 }
 
-void input_item_node_Delete( input_item_node_t *p_node )
+static void RecursiveNodeDelete( input_item_node_t *p_node )
 {
-  int i;
-  for( i = 0; i < p_node->i_children; i++ )
-      input_item_node_Delete( p_node->pp_children[i] );
+  for( int i = 0; i < p_node->i_children; i++ )
+      RecursiveNodeDelete( p_node->pp_children[i] );
+
+  vlc_gc_decref( p_node->p_item );
+  free( p_node->pp_children );
+  free( p_node );
+}
 
+void input_item_node_Delete( input_item_node_t *p_node )
+{
   if(  p_node->p_parent )
   {
-      for( i = 0; i < p_node->p_parent->i_children; i++ )
+      for( int i = 0; i < p_node->p_parent->i_children; i++ )
           if( p_node->p_parent->pp_children[i] == p_node )
           {
               REMOVE_ELEM( p_node->p_parent->pp_children,
@@ -1016,8 +1022,7 @@ void input_item_node_Delete( input_item_node_t *p_node )
           }
   }
 
-  vlc_gc_decref( p_node->p_item );
-  free( p_node );
+  RecursiveNodeDelete( p_node );
 }
 
 input_item_node_t *input_item_node_AppendItem( input_item_node_t *p_node, input_item_t *p_item )