[vlc-commits] playlist: remove redundant hold/release

Rémi Denis-Courmont git at videolan.org
Tue Apr 18 20:56:31 CEST 2017


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Apr 18 21:38:02 2017 +0300| [558b768d58727a709d504b56502cafabf132c216] | committer: Rémi Denis-Courmont

playlist: remove redundant hold/release

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.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=558b768d58727a709d504b56502cafabf132c216
---

 modules/demux/playlist/asx.c       | 1 -
 modules/demux/playlist/b4s.c       | 1 -
 modules/demux/playlist/dvb.c       | 1 -
 modules/demux/playlist/gvp.c       | 2 --
 modules/demux/playlist/ifo.c       | 2 --
 modules/demux/playlist/itml.c      | 2 --
 modules/demux/playlist/m3u.c       | 1 -
 modules/demux/playlist/playlist.c  | 7 -------
 modules/demux/playlist/playlist.h  | 6 ++++--
 modules/demux/playlist/pls.c       | 1 -
 modules/demux/playlist/podcast.c   | 2 --
 modules/demux/playlist/qtl.c       | 2 --
 modules/demux/playlist/ram.c       | 1 -
 modules/demux/playlist/sgimb.c     | 1 -
 modules/demux/playlist/shoutcast.c | 1 -
 modules/demux/playlist/wpl.c       | 1 -
 modules/demux/playlist/xspf.c      | 1 -
 17 files changed, 4 insertions(+), 29 deletions(-)

diff --git a/modules/demux/playlist/asx.c b/modules/demux/playlist/asx.c
index 3d78dde738..e340b8943e 100644
--- a/modules/demux/playlist/asx.c
+++ b/modules/demux/playlist/asx.c
@@ -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;
 }
diff --git a/modules/demux/playlist/b4s.c b/modules/demux/playlist/b4s.c
index 676cb04440..a9ebba02e8 100644
--- a/modules/demux/playlist/b4s.c
+++ b/modules/demux/playlist/b4s.c
@@ -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;
diff --git a/modules/demux/playlist/dvb.c b/modules/demux/playlist/dvb.c
index 48b49551ec..9de9cddcad 100644
--- a/modules/demux/playlist/dvb.c
+++ b/modules/demux/playlist/dvb.c
@@ -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 */
 }
diff --git a/modules/demux/playlist/gvp.c b/modules/demux/playlist/gvp.c
index 6cad202f32..04dc3eb585 100644
--- a/modules/demux/playlist/gvp.c
+++ b/modules/demux/playlist/gvp.c
@@ -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 );
diff --git a/modules/demux/playlist/ifo.c b/modules/demux/playlist/ifo.c
index 5f0eae6949..9b28c7cd55 100644
--- a/modules/demux/playlist/ifo.c
+++ b/modules/demux/playlist/ifo.c
@@ -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 */
diff --git a/modules/demux/playlist/itml.c b/modules/demux/playlist/itml.c
index 70fe91c2e5..5f636262f1 100644
--- a/modules/demux/playlist/itml.c
+++ b/modules/demux/playlist/itml.c
@@ -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 );
diff --git a/modules/demux/playlist/m3u.c b/modules/demux/playlist/m3u.c
index 8a84d9a972..98798e306d 100644
--- a/modules/demux/playlist/m3u.c
+++ b/modules/demux/playlist/m3u.c
@@ -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 */
 }
diff --git a/modules/demux/playlist/playlist.c b/modules/demux/playlist/playlist.c
index dca07f5b19..23f928278d 100644
--- a/modules/demux/playlist/playlist.c
+++ b/modules/demux/playlist/playlist.c
@@ -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.
  *
diff --git a/modules/demux/playlist/playlist.h b/modules/demux/playlist/playlist.h
index 65b7697938..fd242c39f9 100644
--- a/modules/demux/playlist/playlist.h
+++ b/modules/demux/playlist/playlist.h
@@ -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 { \
diff --git a/modules/demux/playlist/pls.c b/modules/demux/playlist/pls.c
index 9419a22a88..f2267db0f9 100644
--- a/modules/demux/playlist/pls.c
+++ b/modules/demux/playlist/pls.c
@@ -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 */
 }
diff --git a/modules/demux/playlist/podcast.c b/modules/demux/playlist/podcast.c
index 7d21575eb1..466f85efef 100644
--- a/modules/demux/playlist/podcast.c
+++ b/modules/demux/playlist/podcast.c
@@ -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;
 }
 
diff --git a/modules/demux/playlist/qtl.c b/modules/demux/playlist/qtl.c
index 46d0d82421..71e20df800 100644
--- a/modules/demux/playlist/qtl.c
+++ b/modules/demux/playlist/qtl.c
@@ -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 );
diff --git a/modules/demux/playlist/ram.c b/modules/demux/playlist/ram.c
index aca7a57d9d..f9aca44e23 100644
--- a/modules/demux/playlist/ram.c
+++ b/modules/demux/playlist/ram.c
@@ -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 */
diff --git a/modules/demux/playlist/sgimb.c b/modules/demux/playlist/sgimb.c
index 017fdc245d..24a8a7abed 100644
--- a/modules/demux/playlist/sgimb.c
+++ b/modules/demux/playlist/sgimb.c
@@ -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 */
 }
diff --git a/modules/demux/playlist/shoutcast.c b/modules/demux/playlist/shoutcast.c
index f11f650431..c32589737a 100644
--- a/modules/demux/playlist/shoutcast.c
+++ b/modules/demux/playlist/shoutcast.c
@@ -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;
 }
 
diff --git a/modules/demux/playlist/wpl.c b/modules/demux/playlist/wpl.c
index b036c7f0ba..eb96cfe5c2 100644
--- a/modules/demux/playlist/wpl.c
+++ b/modules/demux/playlist/wpl.c
@@ -279,7 +279,6 @@ static int Demux( demux_t* p_demux )
     }
 
     input_item_node_PostAndDelete( p_node );
-    input_item_Release( p_input );
     return 0;
 }
 
diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c
index b3db813263..8dbd487fca 100644
--- a/modules/demux/playlist/xspf.c
+++ b/modules/demux/playlist/xspf.c
@@ -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 */



More information about the vlc-commits mailing list