Commit 24ed0b35 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Bonjour: use the avahi thread backend

Simpler and free from arbitrary wake ups
parent d20d0224
/***************************************************************************** /*****************************************************************************
* bonjour.c: Bonjour services discovery module * bonjour.c: Bonjour services discovery module
***************************************************************************** *****************************************************************************
* Copyright (C) 2005 the VideoLAN team * Copyright (C) 2005-2008 the VideoLAN team
* $Id$ * $Id$
* *
* Authors: Jon Lech Johansen <jon@nanocrew.net> * Authors: Jon Lech Johansen <jon@nanocrew.net>
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
# include <avahi-client/publish.h> # include <avahi-client/publish.h>
# include <avahi-client/lookup.h> # include <avahi-client/lookup.h>
#endif #endif
#include <avahi-common/simple-watch.h> #include <avahi-common/thread-watch.h>
#include <avahi-common/malloc.h> #include <avahi-common/malloc.h>
#include <avahi-common/error.h> #include <avahi-common/error.h>
...@@ -66,7 +66,7 @@ vlc_module_end(); ...@@ -66,7 +66,7 @@ vlc_module_end();
struct services_discovery_sys_t struct services_discovery_sys_t
{ {
AvahiSimplePoll *simple_poll; AvahiThreadedPoll *poll;
AvahiClient *client; AvahiClient *client;
AvahiServiceBrowser *sb; AvahiServiceBrowser *sb;
vlc_dictionary_t services_name_to_input_item; vlc_dictionary_t services_name_to_input_item;
...@@ -96,7 +96,7 @@ static void client_callback( AvahiClient *c, AvahiClientState state, ...@@ -96,7 +96,7 @@ static void client_callback( AvahiClient *c, AvahiClientState state,
#endif #endif
{ {
msg_Err( p_sd, "avahi client disconnected" ); msg_Err( p_sd, "avahi client disconnected" );
avahi_simple_poll_quit( p_sys->simple_poll ); avahi_threaded_poll_quit( p_sys->poll );
} }
} }
...@@ -279,14 +279,14 @@ static int Open( vlc_object_t *p_this ) ...@@ -279,14 +279,14 @@ static int Open( vlc_object_t *p_this )
vlc_dictionary_init( &p_sys->services_name_to_input_item, 1 ); vlc_dictionary_init( &p_sys->services_name_to_input_item, 1 );
p_sys->simple_poll = avahi_simple_poll_new(); p_sys->poll = avahi_threaded_poll_new();
if( p_sys->simple_poll == NULL ) if( p_sys->poll == NULL )
{ {
msg_Err( p_sd, "failed to create avahi simple poll" ); msg_Err( p_sd, "failed to create Avahi threaded poll" );
goto error; goto error;
} }
p_sys->client = avahi_client_new( avahi_simple_poll_get(p_sys->simple_poll), p_sys->client = avahi_client_new( avahi_threaded_poll_get(p_sys->poll),
#ifdef HAVE_AVAHI_06 #ifdef HAVE_AVAHI_06
0, 0,
#endif #endif
...@@ -313,8 +313,6 @@ static int Open( vlc_object_t *p_this ) ...@@ -313,8 +313,6 @@ static int Open( vlc_object_t *p_this )
services_discovery_SetLocalizedName( p_sd, _("Bonjour") ); services_discovery_SetLocalizedName( p_sd, _("Bonjour") );
p_sd->pf_run = Run;
return VLC_SUCCESS; return VLC_SUCCESS;
error: error:
...@@ -322,8 +320,8 @@ error: ...@@ -322,8 +320,8 @@ error:
avahi_service_browser_free( p_sys->sb ); avahi_service_browser_free( p_sys->sb );
if( p_sys->client != NULL ) if( p_sys->client != NULL )
avahi_client_free( p_sys->client ); avahi_client_free( p_sys->client );
if( p_sys->simple_poll != NULL ) if( p_sys->poll != NULL )
avahi_simple_poll_free( p_sys->simple_poll ); avahi_threaded_poll_free( p_sys->poll );
vlc_dictionary_clear( &p_sys->services_name_to_input_item ); vlc_dictionary_clear( &p_sys->services_name_to_input_item );
free( p_sys ); free( p_sys );
...@@ -341,25 +339,8 @@ static void Close( vlc_object_t *p_this ) ...@@ -341,25 +339,8 @@ static void Close( vlc_object_t *p_this )
avahi_service_browser_free( p_sys->sb ); avahi_service_browser_free( p_sys->sb );
avahi_client_free( p_sys->client ); avahi_client_free( p_sys->client );
avahi_simple_poll_free( p_sys->simple_poll ); avahi_threaded_poll_free( p_sys->poll );
vlc_dictionary_clear( &p_sys->services_name_to_input_item ); vlc_dictionary_clear( &p_sys->services_name_to_input_item );
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;
while( vlc_object_alive (p_sd) )
{
if( avahi_simple_poll_iterate( p_sys->simple_poll, 100 ) != 0 )
{
msg_Err( p_sd, "poll iterate failed" );
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