[vlc-devel] commit: playlist: To avoid race on p_input destruction, keep a reference around while we need it in playlist_MLLoad(). (Pierre d' Herbemont )

git version control git at videolan.org
Tue Apr 1 01:49:57 CEST 2008


vlc | branch: master | Pierre d'Herbemont <pdherbemont at videolan.org> | Tue Apr  1 01:50:05 2008 +0200| [c338db8dd9e974e5027bdc248e76cb3a518f9b30]

playlist: To avoid race on p_input destruction, keep a reference around while we need it in playlist_MLLoad().

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

 src/playlist/loadsave.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/playlist/loadsave.c b/src/playlist/loadsave.c
index 28b163e..f3b97cd 100644
--- a/src/playlist/loadsave.c
+++ b/src/playlist/loadsave.c
@@ -143,6 +143,7 @@ int playlist_MLLoad( playlist_t *p_playlist )
 
     const char *const psz_option = "meta-file";
     /* that option has to be cleaned in input_item_subitem_added() */
+    /* vlc_gc_decref() in the same function */
     p_input = input_ItemNewExt( p_playlist, psz_uri,
                                 _("Media Library"), 1, &psz_option, -1 );
     if( p_input == NULL )
@@ -156,6 +157,8 @@ int playlist_MLLoad( playlist_t *p_playlist )
 
     p_playlist->p_ml_onelevel->p_input =
     p_playlist->p_ml_category->p_input = p_input;
+    /* We save the input at two different place, incref */
+    vlc_gc_incref( p_input );
     vlc_gc_incref( p_input );
     PL_UNLOCK;
 
@@ -177,6 +180,8 @@ 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;
 




More information about the vlc-devel mailing list