]> git.sesse.net Git - vlc/commitdiff
Services discovery are not forced to have a run function
authorClément Stenac <zorglub@videolan.org>
Sun, 17 Sep 2006 14:36:06 +0000 (14:36 +0000)
committerClément Stenac <zorglub@videolan.org>
Sun, 17 Sep 2006 14:36:06 +0000 (14:36 +0000)
modules/services_discovery/sap.c
modules/services_discovery/shout.c
src/playlist/services_discovery.c

index 97c6f853b335b55c4e9a33cb269f36ea2d366603..a24d9a2e63dfa897d8556e72dd27eb1ba9eb4d01 100644 (file)
@@ -224,7 +224,6 @@ struct services_discovery_sys_t
     /* playlist node */
     playlist_item_t *p_node_cat;
     playlist_item_t *p_node_one;
-    playlist_t *p_playlist;
 
     /* Table of announces */
     int i_announces;
@@ -304,16 +303,9 @@ static int Open( vlc_object_t *p_this )
             ? VLC_TRUE : VLC_FALSE;
 
     /* Create our playlist node */
-    p_sys->p_playlist = (playlist_t *)vlc_object_find( p_sd,
-                                                       VLC_OBJECT_PLAYLIST,
-                                                       FIND_ANYWHERE );
-    if( !p_sys->p_playlist )
-    {
-        msg_Warn( p_sd, "unable to find playlist, cancelling SAP listening");
-        return VLC_EGENERIC;
-    }
+    pl_Yield( p_sd );
 
-    playlist_NodesPairCreate( p_sys->p_playlist, _("SAP sessions"),
+    playlist_NodesPairCreate( pl_Get( p_sd ), _("SAP sessions"),
                               &p_sys->p_node_cat, &p_sys->p_node_one,
                               VLC_TRUE );
 
@@ -448,15 +440,11 @@ static void Close( vlc_object_t *p_this )
     }
     FREENULL( p_sys->pp_announces );
 
-    if( p_sys->p_playlist )
-    {
-        playlist_NodeDelete( p_sys->p_playlist, p_sys->p_node_cat, VLC_TRUE,
-                             VLC_TRUE );
-        playlist_NodeDelete( p_sys->p_playlist, p_sys->p_node_one, VLC_TRUE,
-                             VLC_TRUE );
-        vlc_object_release( p_sys->p_playlist );
-    }
-
+    playlist_NodeDelete( pl_Get(p_sd), p_sys->p_node_cat, VLC_TRUE,
+                         VLC_TRUE );
+    playlist_NodeDelete( pl_Get(p_sd), p_sys->p_node_one, VLC_TRUE,
+                         VLC_TRUE );
+    pl_Release( p_sd );
     free( p_sys );
 }
 
@@ -568,20 +556,13 @@ static void Run( services_discovery_t *p_sd )
 static int Demux( demux_t *p_demux )
 {
     sdp_t *p_sdp = p_demux->p_sys->p_sdp;
-    playlist_t *p_playlist;
     input_thread_t *p_input;
     input_item_t *p_parent_input;
 
-    p_playlist = (playlist_t *)vlc_object_find( p_demux, VLC_OBJECT_PLAYLIST,
-                                               FIND_ANYWHERE );
-    if( !p_playlist )
-    {
-        msg_Err( p_demux, "playlist could not be found" );
-        return VLC_EGENERIC;
-    }
-
+    playlist_t *p_playlist = pl_Yield( p_demux );
     p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT,
-                                               FIND_PARENT );
+                                                 FIND_PARENT );
+    assert( p_input );
     if( !p_input )
     {
         msg_Err( p_demux, "parent input could not be found" );
@@ -862,7 +843,7 @@ sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash,
 
         if( p_child == NULL )
         {
-            p_child = playlist_NodeCreate( p_sys->p_playlist, psz_value,
+            p_child = playlist_NodeCreate( pl_Get( p_sd ), psz_value,
                                            p_sys->p_node_cat );
             p_child->i_flags &= ~PLAYLIST_SKIP_FLAG;
         }
@@ -872,13 +853,13 @@ sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash,
         p_child = p_sys->p_node_cat;
     }
 
-    p_item = playlist_NodeAddInput( p_sys->p_playlist, p_input, p_child,
+    p_item = playlist_NodeAddInput( pl_Get( p_sd ), p_input, p_child,
                                     PLAYLIST_APPEND, PLAYLIST_END );
     p_item->i_flags &= ~PLAYLIST_SKIP_FLAG;
     p_item->i_flags &= ~PLAYLIST_SAVE_FLAG;
     p_sap->i_item_id_cat = p_item->i_id;
 
-    p_item = playlist_NodeAddInput( p_sys->p_playlist, p_input,
+    p_item = playlist_NodeAddInput( pl_Get( p_sd ), p_input,
                         p_sys->p_node_one, PLAYLIST_APPEND, PLAYLIST_END );
     p_item->i_flags &= ~PLAYLIST_SKIP_FLAG;
     p_item->i_flags &= ~PLAYLIST_SAVE_FLAG;
@@ -1379,10 +1360,7 @@ static int RemoveAnnounce( services_discovery_t *p_sd,
     }
 
     if( p_announce->i_input_id > -1 )
-    {
-        playlist_LockDeleteAllFromInput(
-                        p_sd->p_sys->p_playlist, p_announce->i_input_id );
-    }
+        playlist_LockDeleteAllFromInput( pl_Get(p_sd), p_announce->i_input_id );
 
     for( i = 0; i< p_sd->p_sys->i_announces; i++)
     {
index 9e782df20faecd4ec9591abf852f709ab8355180..d2befbe24749da1355a78564e14d593631f5ae4c 100644 (file)
@@ -121,25 +121,12 @@ static int OpenTV( vlc_object_t *p_this )
 static int Open( vlc_object_t *p_this, int i_type )
 {
     services_discovery_t *p_sd = ( services_discovery_t* )p_this;
-    services_discovery_sys_t *p_sys  = malloc(
-                                    sizeof( services_discovery_sys_t ) );
-
     vlc_value_t         val;
-    playlist_t          *p_playlist;
     playlist_view_t     *p_view;
-
-    p_sd->pf_run = Run;
+    playlist_t          *p_playlist = pl_Yield( p_this );
+    DECMALLOC_ERR( p_sys, services_discovery_sys_t );
     p_sd->p_sys  = p_sys;
 
-    /* Create our playlist node */
-    p_playlist = (playlist_t *)vlc_object_find( p_sd, VLC_OBJECT_PLAYLIST,
-                                                FIND_ANYWHERE );
-    if( !p_playlist )
-    {
-        msg_Warn( p_sd, "unable to find playlist, cancelling");
-        return VLC_EGENERIC;
-    }
-
     switch( i_type )
     {
         case TV:
@@ -168,11 +155,11 @@ static int Open( vlc_object_t *p_this, int i_type )
     p_sys->p_node_one->i_flags |= PLAYLIST_SKIP_FLAG;
     p_sys->p_node_one->p_input->i_id = p_sys->p_node_cat->p_input->i_id;
 
-    val.b_bool = VLC_TRUE;
-    var_Set( p_playlist, "intf-change", val );
+    var_SetVoid( p_playlist, "intf-change" );
 
-    vlc_object_release( p_playlist );
+    pl_Release( p_this );
 
+    input_Read( p_sd, p_sys->p_input, VLC_FALSE );
     return VLC_SUCCESS;
 }
 
@@ -183,26 +170,9 @@ static void Close( vlc_object_t *p_this )
 {
     services_discovery_t *p_sd = ( services_discovery_t* )p_this;
     services_discovery_sys_t *p_sys  = p_sd->p_sys;
-    playlist_t *p_playlist =  (playlist_t *) vlc_object_find( p_sd,
-                                 VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
-    if( p_playlist )
-    {
-        playlist_NodeDelete( p_playlist, p_sys->p_node_cat, VLC_TRUE, VLC_TRUE );
-        playlist_NodeDelete( p_playlist, p_sys->p_node_one, VLC_TRUE, VLC_TRUE );
-        vlc_object_release( p_playlist );
-    }
+    playlist_t *p_playlist =  pl_Yield( p_sd );
+    playlist_NodeDelete( p_playlist, p_sys->p_node_cat, VLC_TRUE, VLC_TRUE );
+    playlist_NodeDelete( p_playlist, p_sys->p_node_one, VLC_TRUE, VLC_TRUE );
+    pl_Release( p_sd );
     free( p_sys );
 }
-
-/*****************************************************************************
- * Run: main thread
- *****************************************************************************/
-static void Run( services_discovery_t *p_sd )
-{
-    services_discovery_sys_t *p_sys = p_sd->p_sys;
-    int i_id = input_Read( p_sd, p_sys->p_input, VLC_FALSE );
-    while( !p_sd->b_die )
-    {
-        msleep( 10*INTF_IDLE_SLEEP );
-    }
-}
index f55699b5881adf40a044d36914b7b7a1eb167ab2..cf3ad5768e85c4a9b93502164fd85e58382effff 100644 (file)
@@ -62,6 +62,8 @@ int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist,
 
     vlc_mutex_unlock( &p_playlist->object_lock );
 
+    if( !p_sd->pf_run ) return VLC_SUCCESS;
+
     if( vlc_thread_create( p_sd, "services_discovery", RunSD,
                            VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
     {
@@ -79,8 +81,8 @@ int playlist_ServicesDiscoveryRemove( playlist_t * p_playlist,
 {
     int i;
     services_discovery_t *p_sd = NULL;
-    vlc_mutex_lock( &p_playlist->object_lock );
 
+    PL_LOCK;
     for( i = 0 ; i< p_playlist->i_sds ; i ++ )
     {
         if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) )
@@ -93,22 +95,22 @@ int playlist_ServicesDiscoveryRemove( playlist_t * p_playlist,
 
     if( p_sd )
     {
-        vlc_mutex_unlock( &p_playlist->object_lock );
+        PL_UNLOCK;
         p_sd->b_die = VLC_TRUE;
-        vlc_thread_join( p_sd );
+        if( p_sd->pf_run ) vlc_thread_join( p_sd );
+
         free( p_sd->psz_module );
         module_Unneed( p_sd, p_sd->p_module );
-        vlc_mutex_lock( &p_playlist->object_lock );
+        PL_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 );
+        PL_UNLOCK;
         return VLC_EGENERIC;
     }
-
-    vlc_mutex_unlock( &p_playlist->object_lock );
+    PL_UNLOCK;
     return VLC_SUCCESS;
 }
 
@@ -116,17 +118,17 @@ vlc_bool_t playlist_IsServicesDiscoveryLoaded( playlist_t * p_playlist,
                                               const char *psz_module )
 {
     int i;
-    vlc_mutex_lock( &p_playlist->object_lock );
+    PL_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 );
+            PL_UNLOCK;
             return VLC_TRUE;
         }
     }
-    vlc_mutex_unlock( &p_playlist->object_lock );
+    PL_UNLOCK;
     return VLC_FALSE;
 }
 
@@ -148,14 +150,11 @@ int playlist_AddSDModules( playlist_t *p_playlist, char *psz_modules )
         while( psz_parser && *psz_parser )
         {
             while( *psz_parser == ' ' || *psz_parser == ':' )
-            {
                 psz_parser++;
-            }
 
             if( (psz_next = strchr( psz_parser, ':' ) ) )
-            {
                 *psz_next++ = '\0';
-            }
+
             if( *psz_parser == '\0' )
             {
                 break;