X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Ftimeeventq.c;h=2799bf242602171d69b96b878e61bb4f8de4d05b;hb=2f56f8a0943f92d430c8f395880ace8f5922f85b;hp=5e24ba33b4481f8e31cc647d244d88eff56594c8;hpb=769c00f228ba0d37217aaf1424dedde390e7a01c;p=catta diff --git a/avahi-core/timeeventq.c b/avahi-core/timeeventq.c index 5e24ba3..2799bf2 100644 --- a/avahi-core/timeeventq.c +++ b/avahi-core/timeeventq.c @@ -1,18 +1,16 @@ -/* $Id$ */ - /*** This file is part of avahi. - + avahi is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - + avahi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - + You should have received a copy of the GNU Lesser General Public License along with avahi; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 @@ -59,24 +57,30 @@ static int compare(const void* _a, const void* _b) { return avahi_timeval_compare(&a->last_run, &b->last_run); } +static AvahiTimeEvent* time_event_queue_root(AvahiTimeEventQueue *q) { + assert(q); + + return q->prioq->root ? q->prioq->root->data : NULL; +} + static void update_timeout(AvahiTimeEventQueue *q) { AvahiTimeEvent *e; assert(q); - if ((e = avahi_time_event_queue_root(q))) + if ((e = time_event_queue_root(q))) q->poll_api->timeout_update(q->timeout, &e->expiry); else q->poll_api->timeout_update(q->timeout, NULL); } -static void expiration_event(AvahiTimeout *timeout, void *userdata) { - struct timeval now; +static void expiration_event(AVAHI_GCC_UNUSED AvahiTimeout *timeout, void *userdata) { AvahiTimeEventQueue *q = userdata; AvahiTimeEvent *e; - gettimeofday(&now, NULL); - - if ((e = avahi_time_event_queue_root(q))) { + if ((e = time_event_queue_root(q))) { + struct timeval now; + + gettimeofday(&now, NULL); /* Check if expired */ if (avahi_timeval_compare(&now, &e->expiry) >= 0) { @@ -88,9 +92,13 @@ static void expiration_event(AvahiTimeout *timeout, void *userdata) { /* Run it */ assert(e->callback); e->callback(e, e->userdata); + + update_timeout(q); + return; } } + avahi_log_debug(__FILE__": Strange, expiration_event() called, but nothing really happened."); update_timeout(q); } @@ -98,6 +106,8 @@ static void fix_expiry_time(AvahiTimeEvent *e) { struct timeval now; assert(e); + return; /*** DO WE REALLY NEED THIS? ***/ + gettimeofday(&now, NULL); if (avahi_timeval_compare(&now, &e->expiry) > 0) @@ -117,9 +127,9 @@ AvahiTimeEventQueue* avahi_time_event_queue_new(const AvahiPoll *poll_api) { if (!(q->prioq = avahi_prio_queue_new(compare))) goto oom; - if (!(q->timeout = poll_api->timeout_new(poll_api, NULL, expiration_event, q))) + if (!(q->timeout = poll_api->timeout_new(poll_api, NULL, expiration_event, q))) goto oom; - + return q; oom: @@ -130,21 +140,21 @@ oom: if (q->prioq) avahi_prio_queue_free(q->prioq); } - + return NULL; } void avahi_time_event_queue_free(AvahiTimeEventQueue *q) { AvahiTimeEvent *e; - + assert(q); - while ((e = avahi_time_event_queue_root(q))) + while ((e = time_event_queue_root(q))) avahi_time_event_free(e); avahi_prio_queue_free(q->prioq); q->poll_api->timeout_free(q->timeout); - + avahi_free(q); } @@ -153,9 +163,9 @@ AvahiTimeEvent* avahi_time_event_new( const struct timeval *timeval, AvahiTimeEventCallback callback, void* userdata) { - + AvahiTimeEvent *e; - + assert(q); assert(callback); assert(userdata); @@ -164,7 +174,7 @@ AvahiTimeEvent* avahi_time_event_new( avahi_log_error(__FILE__": Out of memory"); return NULL; /* OOM */ } - + e->queue = q; e->callback = callback; e->userdata = userdata; @@ -175,9 +185,9 @@ AvahiTimeEvent* avahi_time_event_new( e->expiry.tv_sec = 0; e->expiry.tv_usec = 0; } - + fix_expiry_time(e); - + e->last_run.tv_sec = 0; e->last_run.tv_usec = 0; @@ -209,20 +219,7 @@ void avahi_time_event_update(AvahiTimeEvent *e, const struct timeval *timeval) { e->expiry = *timeval; fix_expiry_time(e); avahi_prio_queue_shuffle(e->queue->prioq, e->node); - - update_timeout(e->queue); -} -AvahiTimeEvent* avahi_time_event_queue_root(AvahiTimeEventQueue *q) { - assert(q); - - return q->prioq->root ? q->prioq->root->data : NULL; -} - -AvahiTimeEvent* avahi_time_event_next(AvahiTimeEvent *e) { - assert(e); - - return e->node->next->data; + update_timeout(e->queue); } -