]> git.sesse.net Git - vlc/commitdiff
Remove services discovery tasks before the playlist
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Thu, 12 Jun 2008 19:01:16 +0000 (22:01 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Thu, 12 Jun 2008 19:01:16 +0000 (22:01 +0300)
I assume nothing can ever try to add a new one once the interfaces have
been destroyed. If not there is a race condition.

src/libvlc.c
src/libvlc.h
src/playlist/engine.c
src/playlist/services_discovery.c

index 9c60cab88c1c731a7081251e47c864b8784b14e9..24e391319d607d3f26f61c618b23e52c30829903 100644 (file)
@@ -950,6 +950,10 @@ int libvlc_InternalCleanup( libvlc_int_t *p_libvlc )
     }
 #endif
 
+    /* Remove all services discovery */
+    msg_Dbg( p_libvlc, "removing all services discovery tasks" );
+    playlist_ServicesDiscoveryKillAll( priv->p_playlist );
+
     /* Free playlist */
     msg_Dbg( p_libvlc, "removing playlist" );
     vlc_object_release( priv->p_playlist );
index 936b75c1e06ed95aa08584703756c0077131638e..0964abdf278af655ca08acb88759ef8c4832fec1 100644 (file)
@@ -247,6 +247,8 @@ static inline libvlc_priv_t *libvlc_priv (libvlc_int_t *libvlc)
     return (libvlc_priv_t *)(libvlc + 1);
 }
 
+void playlist_ServicesDiscoveryKillAll( playlist_t *p_playlist );
+
 #define libvlc_stats( o ) (libvlc_priv((VLC_OBJECT(o))->p_libvlc)->b_stats)
 
 /**
index 3ee5cb74becd94d81d5bfb5ab21a69dc01a83401..94dda74e77807759e3e4864b673679df6d39b10d 100644 (file)
@@ -419,12 +419,8 @@ void playlist_LastLoop( playlist_t *p_playlist )
         sout_DeleteInstance( p_sout );
 #endif
 
-    while( p_playlist->i_sds )
-    {
-        playlist_ServicesDiscoveryRemove( p_playlist,
-                                          p_playlist->pp_sds[0]->p_sd->psz_module );
-    }
-
+    /* Core should have terminated all SDs before the playlist */
+    assert( p_playlist->i_sds == 0 );
     playlist_MLDump( p_playlist );
 
     PL_LOCK;
index 6f3cda60de2041337b0031dbc5a83bb1bbcc67ae..4fb9ea3f43e1c768d3989308ba9f7a8cdda3adf8 100644 (file)
@@ -430,3 +430,10 @@ bool playlist_IsServicesDiscoveryLoaded( playlist_t * p_playlist,
     return false;
 }
 
+void playlist_ServicesDiscoveryKillAll( playlist_t *p_playlist )
+{
+    while( p_playlist->i_sds > 0 )
+        playlist_ServicesDiscoveryRemove( p_playlist,
+                                     p_playlist->pp_sds[0]->p_sd->psz_module );
+}
+