]> git.sesse.net Git - vlc/commitdiff
Fix yesterday's VLM bug
authorRémi Denis-Courmont <rem@videolan.org>
Thu, 8 May 2008 17:06:10 +0000 (20:06 +0300)
committerRémi Denis-Courmont <rem@videolan.org>
Thu, 8 May 2008 17:06:10 +0000 (20:06 +0300)
src/input/vlm.c

index 69ac07b3951b6640957e8ab1290925678fdc026d..50d70765349b1c908c5c24786594143819f82324 100644 (file)
@@ -178,8 +178,15 @@ vlm_t *__vlm_New ( vlc_object_t *p_this )
  *****************************************************************************/
 void vlm_Delete( vlm_t *p_vlm )
 {
-    /* FIXME XXX: we need to set libvlc_priv->p_vlm bacl to NULL */
+    vlc_value_t lockval;
+
+    /* vlm_Delete() is serialized against itself, and against vlm_New().
+     * This way, vlm_Destructor () (called from vlc_objet_release() above)
+     * is serialized against setting libvlc_priv->p_vlm from vlm_New(). */
+    var_Get( p_vlm->p_libvlc, "vlm_mutex", &lockval );
+    vlc_mutex_lock( lockval.p_address );
     vlc_object_release( p_vlm );
+    vlc_mutex_unlock( lockval.p_address );
 }
 
 /*****************************************************************************
@@ -187,6 +194,8 @@ void vlm_Delete( vlm_t *p_vlm )
  *****************************************************************************/
 static void vlm_Destructor( vlm_t *p_vlm )
 {
+    libvlc_priv (p_vlm->p_libvlc)->p_vlm = NULL;
+
     vlm_ControlInternal( p_vlm, VLM_CLEAR_MEDIAS );
     TAB_CLEAN( p_vlm->i_media, p_vlm->media );