ecore_avahi: @fix timeout to avoid pitfall of forever frozen timer.

@backport.
This commit is contained in:
Cedric Bail 2014-02-28 19:57:44 -03:00
parent c08c0b05a3
commit 7d3e7ad748
1 changed files with 11 additions and 16 deletions

View File

@ -88,7 +88,7 @@ _ecore_avahi_watch_new(const AvahiPoll *api,
static void
_ecore_avahi_watch_update(AvahiWatch *w, AvahiWatchEvent events)
{
Ecore_Avahi_Watch *watch = (Ecore_Avahi_Watch *) w;
Ecore_Avahi_Watch *watch = (Ecore_Avahi_Watch *) w;
ecore_main_fd_handler_active_set(watch->handler, _ecore_avahi_events2ecore(events));
}
@ -137,10 +137,10 @@ _ecore_avahi_timeout_cb(void *data)
{
Ecore_Avahi_Timeout *timeout = data;
ecore_timer_freeze(timeout->timer);
timeout->callback((AvahiTimeout*) timeout, timeout->callback_data);
return ECORE_CALLBACK_RENEW;
timeout->timer = NULL;
return ECORE_CALLBACK_CANCEL;
}
static AvahiTimeout *
@ -153,9 +153,8 @@ _ecore_avahi_timeout_new(const AvahiPoll *api, const struct timeval *tv,
ea = api->userdata;
timeout = calloc(1, sizeof (Ecore_Avahi_Timeout));
if (!timeout) return NULL;
timeout->timer = ecore_timer_add(_ecore_avahi_timeval2double(tv),
_ecore_avahi_timeout_cb, timeout);
if (!tv) ecore_timer_freeze(timeout->timer);
if (tv) timeout->timer = ecore_timer_add(_ecore_avahi_timeval2double(tv),
_ecore_avahi_timeout_cb, timeout);
timeout->callback = callback;
timeout->callback_data = userdata;
timeout->parent = ea;
@ -170,16 +169,12 @@ _ecore_avahi_timeout_update(AvahiTimeout *t, const struct timeval *tv)
{
Ecore_Avahi_Timeout *timeout = (Ecore_Avahi_Timeout *) t;
if (timeout->timer) ecore_timer_del(timeout->timer);
timeout->timer = NULL;
if (tv)
{
ecore_timer_interval_set(timeout->timer, _ecore_avahi_timeval2double(tv));
if (ecore_timer_freeze_get(timeout->timer))
ecore_timer_thaw(timeout->timer);
}
else
{
ecore_timer_freeze(timeout->timer);
}
timeout->timer = ecore_timer_add(_ecore_avahi_timeval2double(tv),
_ecore_avahi_timeout_cb, timeout);
}
static void
@ -187,7 +182,7 @@ _ecore_avahi_timeout_free(AvahiTimeout *t)
{
Ecore_Avahi_Timeout *timeout = (Ecore_Avahi_Timeout *) t;
ecore_timer_del(timeout->timer);
if (timeout->timer) ecore_timer_del(timeout->timer);
timeout->parent->timeouts = eina_list_remove(timeout->parent->timeouts, timeout);
free(timeout);
}