Commit b4f2f488 authored by Clément Stenac's avatar Clément Stenac

Services discovery are not forced to have a run function

parent 360b392d
...@@ -224,7 +224,6 @@ struct services_discovery_sys_t ...@@ -224,7 +224,6 @@ struct services_discovery_sys_t
/* playlist node */ /* playlist node */
playlist_item_t *p_node_cat; playlist_item_t *p_node_cat;
playlist_item_t *p_node_one; playlist_item_t *p_node_one;
playlist_t *p_playlist;
/* Table of announces */ /* Table of announces */
int i_announces; int i_announces;
...@@ -304,16 +303,9 @@ static int Open( vlc_object_t *p_this ) ...@@ -304,16 +303,9 @@ static int Open( vlc_object_t *p_this )
? VLC_TRUE : VLC_FALSE; ? VLC_TRUE : VLC_FALSE;
/* Create our playlist node */ /* Create our playlist node */
p_sys->p_playlist = (playlist_t *)vlc_object_find( p_sd, pl_Yield( 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;
}
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, &p_sys->p_node_cat, &p_sys->p_node_one,
VLC_TRUE ); VLC_TRUE );
...@@ -448,15 +440,11 @@ static void Close( vlc_object_t *p_this ) ...@@ -448,15 +440,11 @@ static void Close( vlc_object_t *p_this )
} }
FREENULL( p_sys->pp_announces ); FREENULL( p_sys->pp_announces );
if( p_sys->p_playlist ) playlist_NodeDelete( pl_Get(p_sd), p_sys->p_node_cat, VLC_TRUE,
{ VLC_TRUE );
playlist_NodeDelete( p_sys->p_playlist, p_sys->p_node_cat, VLC_TRUE, playlist_NodeDelete( pl_Get(p_sd), p_sys->p_node_one, VLC_TRUE,
VLC_TRUE ); VLC_TRUE );
playlist_NodeDelete( p_sys->p_playlist, p_sys->p_node_one, VLC_TRUE, pl_Release( p_sd );
VLC_TRUE );
vlc_object_release( p_sys->p_playlist );
}
free( p_sys ); free( p_sys );
} }
...@@ -568,20 +556,13 @@ static void Run( services_discovery_t *p_sd ) ...@@ -568,20 +556,13 @@ static void Run( services_discovery_t *p_sd )
static int Demux( demux_t *p_demux ) static int Demux( demux_t *p_demux )
{ {
sdp_t *p_sdp = p_demux->p_sys->p_sdp; sdp_t *p_sdp = p_demux->p_sys->p_sdp;
playlist_t *p_playlist;
input_thread_t *p_input; input_thread_t *p_input;
input_item_t *p_parent_input; input_item_t *p_parent_input;
p_playlist = (playlist_t *)vlc_object_find( p_demux, VLC_OBJECT_PLAYLIST, playlist_t *p_playlist = pl_Yield( p_demux );
FIND_ANYWHERE );
if( !p_playlist )
{
msg_Err( p_demux, "playlist could not be found" );
return VLC_EGENERIC;
}
p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT,
FIND_PARENT ); FIND_PARENT );
assert( p_input );
if( !p_input ) if( !p_input )
{ {
msg_Err( p_demux, "parent input could not be found" ); 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, ...@@ -862,7 +843,7 @@ sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash,
if( p_child == NULL ) 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_sys->p_node_cat );
p_child->i_flags &= ~PLAYLIST_SKIP_FLAG; p_child->i_flags &= ~PLAYLIST_SKIP_FLAG;
} }
...@@ -872,13 +853,13 @@ sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash, ...@@ -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_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 ); PLAYLIST_APPEND, PLAYLIST_END );
p_item->i_flags &= ~PLAYLIST_SKIP_FLAG; p_item->i_flags &= ~PLAYLIST_SKIP_FLAG;
p_item->i_flags &= ~PLAYLIST_SAVE_FLAG; p_item->i_flags &= ~PLAYLIST_SAVE_FLAG;
p_sap->i_item_id_cat = p_item->i_id; 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_sys->p_node_one, PLAYLIST_APPEND, PLAYLIST_END );
p_item->i_flags &= ~PLAYLIST_SKIP_FLAG; p_item->i_flags &= ~PLAYLIST_SKIP_FLAG;
p_item->i_flags &= ~PLAYLIST_SAVE_FLAG; p_item->i_flags &= ~PLAYLIST_SAVE_FLAG;
...@@ -1379,10 +1360,7 @@ static int RemoveAnnounce( services_discovery_t *p_sd, ...@@ -1379,10 +1360,7 @@ static int RemoveAnnounce( services_discovery_t *p_sd,
} }
if( p_announce->i_input_id > -1 ) if( p_announce->i_input_id > -1 )
{ playlist_LockDeleteAllFromInput( pl_Get(p_sd), p_announce->i_input_id );
playlist_LockDeleteAllFromInput(
p_sd->p_sys->p_playlist, p_announce->i_input_id );
}
for( i = 0; i< p_sd->p_sys->i_announces; i++) for( i = 0; i< p_sd->p_sys->i_announces; i++)
{ {
......
...@@ -121,25 +121,12 @@ static int OpenTV( vlc_object_t *p_this ) ...@@ -121,25 +121,12 @@ static int OpenTV( vlc_object_t *p_this )
static int Open( vlc_object_t *p_this, int i_type ) static int Open( vlc_object_t *p_this, int i_type )
{ {
services_discovery_t *p_sd = ( services_discovery_t* )p_this; 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; vlc_value_t val;
playlist_t *p_playlist;
playlist_view_t *p_view; playlist_view_t *p_view;
playlist_t *p_playlist = pl_Yield( p_this );
p_sd->pf_run = Run; DECMALLOC_ERR( p_sys, services_discovery_sys_t );
p_sd->p_sys = p_sys; 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 ) switch( i_type )
{ {
case TV: case TV:
...@@ -168,11 +155,11 @@ static int Open( vlc_object_t *p_this, int i_type ) ...@@ -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->i_flags |= PLAYLIST_SKIP_FLAG;
p_sys->p_node_one->p_input->i_id = p_sys->p_node_cat->p_input->i_id; p_sys->p_node_one->p_input->i_id = p_sys->p_node_cat->p_input->i_id;
val.b_bool = VLC_TRUE; var_SetVoid( p_playlist, "intf-change" );
var_Set( p_playlist, "intf-change", val );
vlc_object_release( p_playlist ); pl_Release( p_this );
input_Read( p_sd, p_sys->p_input, VLC_FALSE );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -183,26 +170,9 @@ static void Close( vlc_object_t *p_this ) ...@@ -183,26 +170,9 @@ static void Close( vlc_object_t *p_this )
{ {
services_discovery_t *p_sd = ( services_discovery_t* )p_this; services_discovery_t *p_sd = ( services_discovery_t* )p_this;
services_discovery_sys_t *p_sys = p_sd->p_sys; services_discovery_sys_t *p_sys = p_sd->p_sys;
playlist_t *p_playlist = (playlist_t *) vlc_object_find( p_sd, playlist_t *p_playlist = pl_Yield( p_sd );
VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); playlist_NodeDelete( p_playlist, p_sys->p_node_cat, VLC_TRUE, VLC_TRUE );
if( p_playlist ) playlist_NodeDelete( p_playlist, p_sys->p_node_one, VLC_TRUE, VLC_TRUE );
{ pl_Release( 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 );
vlc_object_release( p_playlist );
}
free( p_sys ); 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 );
}
}
...@@ -62,6 +62,8 @@ int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist, ...@@ -62,6 +62,8 @@ int playlist_ServicesDiscoveryAdd( playlist_t *p_playlist,
vlc_mutex_unlock( &p_playlist->object_lock ); vlc_mutex_unlock( &p_playlist->object_lock );
if( !p_sd->pf_run ) return VLC_SUCCESS;
if( vlc_thread_create( p_sd, "services_discovery", RunSD, if( vlc_thread_create( p_sd, "services_discovery", RunSD,
VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) ) VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
{ {
...@@ -79,8 +81,8 @@ int playlist_ServicesDiscoveryRemove( playlist_t * p_playlist, ...@@ -79,8 +81,8 @@ int playlist_ServicesDiscoveryRemove( playlist_t * p_playlist,
{ {
int i; int i;
services_discovery_t *p_sd = NULL; services_discovery_t *p_sd = NULL;
vlc_mutex_lock( &p_playlist->object_lock );
PL_LOCK;
for( i = 0 ; i< p_playlist->i_sds ; i ++ ) for( i = 0 ; i< p_playlist->i_sds ; i ++ )
{ {
if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) ) if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) )
...@@ -93,22 +95,22 @@ int playlist_ServicesDiscoveryRemove( playlist_t * p_playlist, ...@@ -93,22 +95,22 @@ int playlist_ServicesDiscoveryRemove( playlist_t * p_playlist,
if( p_sd ) if( p_sd )
{ {
vlc_mutex_unlock( &p_playlist->object_lock ); PL_UNLOCK;
p_sd->b_die = VLC_TRUE; 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 ); free( p_sd->psz_module );
module_Unneed( p_sd, p_sd->p_module ); module_Unneed( p_sd, p_sd->p_module );
vlc_mutex_lock( &p_playlist->object_lock ); PL_LOCK;
vlc_object_destroy( p_sd ); vlc_object_destroy( p_sd );
} }
else else
{ {
msg_Warn( p_playlist, "module %s is not loaded", psz_module ); msg_Warn( p_playlist, "module %s is not loaded", psz_module );
vlc_mutex_unlock( &p_playlist->object_lock ); PL_UNLOCK;
return VLC_EGENERIC; return VLC_EGENERIC;
} }
PL_UNLOCK;
vlc_mutex_unlock( &p_playlist->object_lock );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -116,17 +118,17 @@ vlc_bool_t playlist_IsServicesDiscoveryLoaded( playlist_t * p_playlist, ...@@ -116,17 +118,17 @@ vlc_bool_t playlist_IsServicesDiscoveryLoaded( playlist_t * p_playlist,
const char *psz_module ) const char *psz_module )
{ {
int i; int i;
vlc_mutex_lock( &p_playlist->object_lock ); PL_LOCK;
for( i = 0 ; i< p_playlist->i_sds ; i ++ ) for( i = 0 ; i< p_playlist->i_sds ; i ++ )
{ {
if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) ) if( !strcmp( psz_module, p_playlist->pp_sds[i]->psz_module ) )
{ {
vlc_mutex_unlock( &p_playlist->object_lock ); PL_UNLOCK;
return VLC_TRUE; return VLC_TRUE;
} }
} }
vlc_mutex_unlock( &p_playlist->object_lock ); PL_UNLOCK;
return VLC_FALSE; return VLC_FALSE;
} }
...@@ -148,14 +150,11 @@ int playlist_AddSDModules( playlist_t *p_playlist, char *psz_modules ) ...@@ -148,14 +150,11 @@ int playlist_AddSDModules( playlist_t *p_playlist, char *psz_modules )
while( psz_parser && *psz_parser ) while( psz_parser && *psz_parser )
{ {
while( *psz_parser == ' ' || *psz_parser == ':' ) while( *psz_parser == ' ' || *psz_parser == ':' )
{
psz_parser++; psz_parser++;
}
if( (psz_next = strchr( psz_parser, ':' ) ) ) if( (psz_next = strchr( psz_parser, ':' ) ) )
{
*psz_next++ = '\0'; *psz_next++ = '\0';
}
if( *psz_parser == '\0' ) if( *psz_parser == '\0' )
{ {
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment