[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