playlist: remove redundant hold/release
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 18 Apr 2017 18:38:02 +0000 (21:38 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 18 Apr 2017 18:54:12 +0000 (21:54 +0300)
The playlist demuxer cannot outlive its input thread, and the input
thread cannot outlive its input item. Otherwise, there would be an
intractable race between input_GetItem() and input_item_Hold() anyway.

This removes the unnecessary pairs of input item hold and release,
and fixes a reference leak on error in the iTML parser.

17 files changed:
modules/demux/playlist/asx.c
modules/demux/playlist/b4s.c
modules/demux/playlist/dvb.c
modules/demux/playlist/gvp.c
modules/demux/playlist/ifo.c
modules/demux/playlist/itml.c
modules/demux/playlist/m3u.c
modules/demux/playlist/playlist.c
modules/demux/playlist/playlist.h
modules/demux/playlist/pls.c
modules/demux/playlist/podcast.c
modules/demux/playlist/qtl.c
modules/demux/playlist/ram.c
modules/demux/playlist/sgimb.c
modules/demux/playlist/shoutcast.c
modules/demux/playlist/wpl.c
modules/demux/playlist/xspf.c

index 3d78dde..e340b89 100644 (file)
@@ -502,7 +502,6 @@ error:
         input_item_node_Delete( p_subitems );
     if( p_stream )
         vlc_stream_Delete( p_stream );
-    input_item_Release( p_current_input );
 
     return 0;
 }
index 676cb04..a9ebba0 100644 (file)
@@ -230,7 +230,6 @@ end:
     if( p_subitems )
         input_item_node_PostAndDelete( p_subitems );
 
-    input_item_Release( p_current_input );
     if( p_xml_reader )
         xml_ReaderDelete( p_xml_reader );
     return i_ret;
index 48b4955..9de9cdd 100644 (file)
@@ -96,7 +96,6 @@ static int Demux(demux_t *demux)
     }
 
     input_item_node_PostAndDelete(subitems);
-    input_item_Release(input);
 
     return 0; /* Needed for correct operation of go back */
 }
index 6cad202..04dc3eb 100644 (file)
@@ -177,8 +177,6 @@ static int Demux( demux_t *p_demux )
 
     input_item_node_PostAndDelete( p_subitems );
 
-    input_item_Release(p_current_input);
-
     free( psz_version );
     free( psz_url );
     free( psz_docid );
index 5f0eae6..9b28c7c 100644 (file)
@@ -109,7 +109,6 @@ static int Demux( demux_t *p_demux )
     input_item_PostSubItem( p_current_input, p_input );
     input_item_Release( p_input );
 
-    input_item_Release(p_current_input);
     free( psz_url );
 
     return 0; /* Needed for correct operation of go back */
@@ -133,7 +132,6 @@ static int DemuxDVD_VR( demux_t *p_demux )
 
     input_item_Release( p_input );
 
-    input_item_Release(p_current_input);
     free( psz_url );
 
     return 0; /* Needed for correct operation of go back */
index 70fe91c..5f63626 100644 (file)
@@ -118,8 +118,6 @@ int Demux( demux_t *p_demux )
                       pl_elements );
     input_item_node_PostAndDelete( p_subitems );
 
-    input_item_Release(p_current_input);
-
 end:
     if( p_xml_reader )
         xml_ReaderDelete( p_xml_reader );
index 8a84d9a..98798e3 100644 (file)
@@ -305,7 +305,6 @@ static int Demux( demux_t *p_demux )
         }
     }
     input_item_node_PostAndDelete( p_subitems );
-    input_item_Release(p_current_input);
     var_Destroy( p_demux, "m3u-extvlcopt" );
     return 0; /* Needed for correct operation of go back */
 }
index dca07f5..23f9282 100644 (file)
@@ -166,13 +166,6 @@ int Control(demux_t *demux, int query, va_list args)
     return VLC_EGENERIC;
 }
 
-input_item_t * GetCurrentItem(demux_t *p_demux)
-{
-    input_item_t *p_current_input = input_GetItem( p_demux->p_input );
-    input_item_Hold(p_current_input);
-    return p_current_input;
-}
-
 /**
  * Computes the base URL.
  *
index 65b7697..fd242c3 100644 (file)
@@ -74,8 +74,10 @@ void Close_WPL ( vlc_object_t * );
 
 int Import_Dir ( vlc_object_t * );
 
-
-extern input_item_t * GetCurrentItem(demux_t *p_demux);
+static inline input_item_t * GetCurrentItem(demux_t *p_demux)
+{
+    return input_GetItem( p_demux->p_input );
+}
 
 #define CHECK_FILE() \
 do { \
index 9419a22..f2267db 100644 (file)
@@ -194,7 +194,6 @@ static int Demux( demux_t *p_demux )
 
     input_item_node_PostAndDelete( p_subitems );
 
-    input_item_Release(p_current_input);
     free( psz_prefix );
     return 0; /* Needed for correct operation of go back */
 }
index 7d21575..466f85e 100644 (file)
@@ -319,7 +319,6 @@ static int Demux( demux_t *p_demux )
     xml_ReaderDelete( p_xml_reader );
 
     input_item_node_PostAndDelete( p_subitems );
-    input_item_Release(p_current_input);
     return 0; /* Needed for correct operation of go back */
 
 error:
@@ -342,7 +341,6 @@ error:
     if( p_subitems )
         input_item_node_Delete( p_subitems );
 
-    input_item_Release(p_current_input);
     return -1;
 }
 
index 46d0d82..71e20df 100644 (file)
@@ -261,8 +261,6 @@ error:
     if( p_xml_reader )
         xml_ReaderDelete( p_xml_reader );
 
-    input_item_Release(p_current_input);
-
     free( psz_href );
     free( psz_moviename );
     free( psz_qtnext );
index aca7a57..f9aca44 100644 (file)
@@ -379,7 +379,6 @@ static int Demux( demux_t *p_demux )
         }
     }
     input_item_node_PostAndDelete( p_subitems );
-    input_item_Release(p_current_input);
     var_Destroy( p_demux, "m3u-extvlcopt" );
     free(psz_prefix);
     return 0; /* Needed for correct operation of go back */
index 017fdc2..24a8a7a 100644 (file)
@@ -401,6 +401,5 @@ static int Demux ( demux_t *p_demux )
 
     input_item_PostSubItem( p_current_input, p_child );
     input_item_Release( p_child );
-    input_item_Release(p_current_input);
     return 0; /* Needed for correct operation of go back */
 }
index f11f650..c325897 100644 (file)
@@ -120,7 +120,6 @@ error:
     if( p_xml_reader )
         xml_ReaderDelete( p_xml_reader );
     if( p_input_node ) input_item_node_Delete( p_input_node );
-    input_item_Release(p_current_input);
     return i_ret;
 }
 
index b036c7f..eb96cfe 100644 (file)
@@ -279,7 +279,6 @@ static int Demux( demux_t* p_demux )
     }
 
     input_item_node_PostAndDelete( p_node );
-    input_item_Release( p_input );
     return 0;
 }
 
index b3db813..8dbd487 100644 (file)
@@ -160,7 +160,6 @@ static int Demux(demux_t *p_demux)
     input_item_node_PostAndDelete(p_subitems);
 
 end:
-    input_item_Release(p_current_input);
     if (p_xml_reader)
         xml_ReaderDelete(p_xml_reader);
     return i_ret; /* Needed for correct operation of go back */