]> git.sesse.net Git - vlc/blobdiff - src/playlist/services_discovery.c
Restore loop
[vlc] / src / playlist / services_discovery.c
index a77ed3496b34ae1ab2359f01b2114cd248565510..407ac757a958c5b4ebf2f5eee7c9cff59ab81d40 100644 (file)
@@ -80,7 +80,7 @@ int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist,
     return VLC_SUCCESS;
 }
 
-void playlist_ServicesDiscoveryRemove( playlist_t * p_playlist,
+int playlist_ServicesDiscoveryRemove( playlist_t * p_playlist,
                                        const char *psz_module )
 {
     int i;
@@ -99,20 +99,43 @@ void playlist_ServicesDiscoveryRemove( playlist_t * p_playlist,
 
     if( p_sd )
     {
+        vlc_mutex_unlock( &p_playlist->object_lock );
         p_sd->b_die = VLC_TRUE;
         vlc_thread_join( p_sd );
         module_Unneed( p_sd, p_sd->p_module );
+        vlc_mutex_lock( &p_playlist->object_lock );
         vlc_object_destroy( p_sd );
     }
     else
     {
         msg_Warn( p_playlist, "module %s is not loaded", psz_module );
+        vlc_mutex_unlock( &p_playlist->object_lock );
+        return VLC_EGENERIC;
     }
 
     vlc_mutex_unlock( &p_playlist->object_lock );
-    return;
+    return VLC_SUCCESS;
 }
 
+vlc_bool_t playlist_IsServicesDiscoveryLoaded( playlist_t * p_playlist,
+                                              const char *psz_module )
+{
+    int i;
+    vlc_mutex_lock( &p_playlist->object_lock );
+
+    for( i = 0 ; i< p_playlist->i_sds ; i ++ )
+    {
+        if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) )
+        {
+            vlc_mutex_unlock( &p_playlist->object_lock );
+            return VLC_TRUE;
+        }
+    }
+    vlc_mutex_unlock( &p_playlist->object_lock );
+    return VLC_FALSE;
+}
+
+
 /**
  * Load all service discovery modules in a string
  *