vlc | branch: master | Thomas Guillem <[email protected]> | Mon Feb 8 09:14:34 2016 +0100| [51b842beaa1bfebc8dfaf4468553d5a45307f784] | committer: Thomas Guillem
microdns: don't cancel listen thread > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=51b842beaa1bfebc8dfaf4468553d5a45307f784 --- modules/services_discovery/microdns.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/modules/services_discovery/microdns.c b/modules/services_discovery/microdns.c index a6f761c..0b09834 100644 --- a/modules/services_discovery/microdns.c +++ b/modules/services_discovery/microdns.c @@ -28,6 +28,7 @@ #include <assert.h> #include <vlc_common.h> +#include <vlc_atomic.h> #include <vlc_plugin.h> #include <vlc_modules.h> #include <vlc_services_discovery.h> @@ -65,6 +66,7 @@ vlc_module_end () struct services_discovery_sys_t { vlc_thread_t thread; + atomic_bool stop; struct mdns_ctx * p_microdns; char * psz_service_names_opt; const char ** ppsz_service_names; @@ -307,9 +309,15 @@ static bool stop_cb( void *p_this ) { services_discovery_t *p_sd = ( services_discovery_t* )p_this; - vlc_testcancel(); - items_timeout( p_sd ); - return false; + services_discovery_sys_t *p_sys = p_sd->p_sys; + + if( atomic_load( &p_sys->stop ) ) + return true; + else + { + items_timeout( p_sd ); + return false; + } } static void * @@ -341,6 +349,7 @@ Open( vlc_object_t *p_obj ) if( !p_sys ) return VLC_ENOMEM; + atomic_init( &p_sys->stop, false ); vlc_array_init( &p_sys->items ); config_ChainParse( p_sd, CFG_PREFIX, ppsz_options, p_sd->p_cfg ); @@ -433,7 +442,7 @@ 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; - vlc_cancel( p_sys->thread ); + atomic_store( &p_sys->stop, true ); vlc_join( p_sys->thread, NULL ); items_clear( p_sd ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
