]> git.sesse.net Git - vlc/blobdiff - src/libvlc.c
Remove unused variable
[vlc] / src / libvlc.c
index f31f150d5f879a0974aaa826822a67ba86b5ad88..71ed33ad936acf572f04f87d37bd0fdcce132042 100644 (file)
@@ -933,7 +933,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
 int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 {
     intf_thread_t      * p_intf = NULL;
-    vout_thread_t      * p_vout = NULL;
     libvlc_priv_t      *priv = libvlc_priv (p_libvlc);
 
     /* Ask the interfaces to stop and destroy them */
@@ -954,15 +953,18 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     }
 #endif
 
+    playlist_t *p_playlist = priv->p_playlist;
     /* Remove all services discovery */
     msg_Dbg( p_libvlc, "removing all services discovery tasks" );
-    playlist_ServicesDiscoveryKillAll( priv->p_playlist );
+    playlist_ServicesDiscoveryKillAll( p_playlist );
 
     /* Free playlist */
+    /* Any thread still running must not assume pl_Yield() succeeds. */
     msg_Dbg( p_libvlc, "removing playlist" );
-    vlc_object_kill( priv->p_playlist );
-    vlc_thread_join( priv->p_playlist );
-    vlc_object_release( priv->p_playlist );
+    priv->p_playlist = NULL;
+    vlc_object_kill( p_playlist ); /* <-- memory barrier for pl_Yield() */
+    vlc_thread_join( p_playlist );
+    vlc_object_release( p_playlist );
 
     /* Free interaction */
     msg_Dbg( p_libvlc, "removing interaction" );
@@ -970,11 +972,11 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
 
     /* Free video outputs */
     msg_Dbg( p_libvlc, "removing all video outputs" );
-    while( (p_vout = vlc_object_find( p_libvlc, VLC_OBJECT_VOUT, FIND_CHILD )) )
+    vlc_list_t *list = vlc_list_find (p_libvlc, VLC_OBJECT_VOUT, FIND_CHILD);
+    for (unsigned i = 0; i < list->i_count; i++)
     {
-        vlc_object_detach( p_vout );
-        vlc_object_release( p_vout );
-        vlc_object_release( p_vout );
+        vlc_object_release (list->p_values[i].p_object);
+        vlc_object_release (list->p_values[i].p_object);
     }
 
     stats_TimersDumpAll( p_libvlc );