X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Fdbus-watch-glue.c;h=a8779d52aa08549b1672b29024e5228f972aa86a;hb=53759b345814d36f75e2a534113e3b1cd0120f08;hp=80d35f29ddef80b9783596f74ab6303321e8bf03;hpb=66c497f4637276f390f1a7afaf7fe07616da9f1a;p=catta diff --git a/avahi-common/dbus-watch-glue.c b/avahi-common/dbus-watch-glue.c index 80d35f2..a8779d5 100644 --- a/avahi-common/dbus-watch-glue.c +++ b/avahi-common/dbus-watch-glue.c @@ -22,8 +22,8 @@ #include #include -#include - +#include "malloc.h" +#include "timeval.h" #include "dbus-watch-glue.h" static AvahiWatchEvent translate_dbus_to_avahi(unsigned int f) { @@ -81,13 +81,15 @@ static void connection_data_unref(ConnectionData *d) { } } -static void request_dispatch(ConnectionData *d) { +static void request_dispatch(ConnectionData *d, int enable) { static const struct timeval tv = { 0, 0 }; assert(d); - assert(dbus_connection_get_dispatch_status(d->connection) == DBUS_DISPATCH_DATA_REMAINS); - - d->poll_api->timeout_update(d->dispatch_timeout, &tv); + if (enable) { + assert(dbus_connection_get_dispatch_status(d->connection) == DBUS_DISPATCH_DATA_REMAINS); + d->poll_api->timeout_update(d->dispatch_timeout, &tv); + } else + d->poll_api->timeout_update(d->dispatch_timeout, NULL); } static void dispatch_timeout_callback(AvahiTimeout *t, void *userdata) { @@ -100,14 +102,17 @@ static void dispatch_timeout_callback(AvahiTimeout *t, void *userdata) { if (dbus_connection_dispatch(d->connection) == DBUS_DISPATCH_DATA_REMAINS) /* If there's still data, request that this handler is called again */ - request_dispatch(d); + request_dispatch(d, 1); + else + request_dispatch(d, 0); dbus_connection_unref(d->connection); connection_data_unref(d); } -static void watch_callback(AvahiWatch *avahi_watch, int fd, AvahiWatchEvent events, void *userdata) { +static void watch_callback(AvahiWatch *avahi_watch, AVAHI_GCC_UNUSED int fd, AvahiWatchEvent events, void *userdata) { DBusWatch *dbus_watch = userdata; + assert(avahi_watch); assert(dbus_watch); @@ -286,7 +291,7 @@ static void remove_timeout(DBusTimeout *dbus_timeout, void *userdata) { timeout->avahi_timeout = NULL; } -static void timeout_toggled(DBusTimeout *dbus_timeout, void *userdata) { +static void timeout_toggled(DBusTimeout *dbus_timeout, AVAHI_GCC_UNUSED void *userdata) { TimeoutData *timeout; assert(dbus_timeout); @@ -296,11 +301,11 @@ static void timeout_toggled(DBusTimeout *dbus_timeout, void *userdata) { update_timeout(timeout); } -static void dispatch_status(DBusConnection *connection, DBusDispatchStatus new_status, void *userdata) { +static void dispatch_status(AVAHI_GCC_UNUSED DBusConnection *connection, DBusDispatchStatus new_status, void *userdata) { ConnectionData *d = userdata; if (new_status == DBUS_DISPATCH_DATA_REMAINS) - request_dispatch(d); + request_dispatch(d, 1); } int avahi_dbus_connection_glue(DBusConnection *c, const AvahiPoll *poll_api) { @@ -328,7 +333,7 @@ int avahi_dbus_connection_glue(DBusConnection *c, const AvahiPoll *poll_api) { dbus_connection_set_dispatch_status_function(c, dispatch_status, connection_data_ref(d), (DBusFreeFunction)connection_data_unref); if (dbus_connection_get_dispatch_status(c) == DBUS_DISPATCH_DATA_REMAINS) - request_dispatch(d); + request_dispatch(d, 1); connection_data_unref(d);