char **ppsz_urls;
int i_urls;
+ vlc_thread_t thread;
vlc_mutex_t lock;
vlc_cond_t wait;
bool b_update;
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static void Run( services_discovery_t *p_intf );
+static void *Run( void * );
static int UrlsChange( vlc_object_t *, char const *, vlc_value_t,
vlc_value_t, void * );
static void ParseUrls( services_discovery_t *p_sd, char *psz_urls );
vlc_cond_init( &p_sys->wait );
p_sys->b_update = true;
- p_sd->pf_run = Run;
p_sd->p_sys = p_sys;
-
/* Give us a name */
services_discovery_SetLocalizedName( p_sd, _("Podcasts") );
var_Create( p_sd, "podcast-urls", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_AddCallback( p_sd, "podcast-urls", UrlsChange, p_sys );
+ if (vlc_clone (&p_sys->thread, Run, p_sd, VLC_THREAD_PRIORITY_LOW))
+ {
+ free (p_sys);
+ return VLC_EGENERIC;
+ }
return VLC_SUCCESS;
}
services_discovery_sys_t *p_sys = p_sd->p_sys;
int i;
+ vlc_cancel (p_sys->thread);
+ vlc_join (p_sys->thread, NULL);
+
var_DelCallback( p_sd, "podcast-urls", UrlsChange, p_sys );
vlc_cond_destroy( &p_sys->wait );
vlc_mutex_destroy( &p_sys->lock );
/*****************************************************************************
* Run: main thread
*****************************************************************************/
-static void Run( services_discovery_t *p_sd )
+static void *Run( void *data )
{
+ services_discovery_t *p_sd = data;
services_discovery_sys_t *p_sys = p_sd->p_sys;
vlc_mutex_lock( &p_sys->lock );