dbus_free (entry);
}
-static void
-handle_timeout_callback (DBusTimeout *timeout,
- void *data)
-{
- BusPendingActivation *pending_activation = data;
-
- while (!dbus_timeout_handle (pending_activation->timeout))
- _dbus_wait_for_memory ();
-}
-
static BusPendingActivation *
bus_pending_activation_ref (BusPendingActivation *pending_activation)
{
if (pending_activation->timeout_added)
{
_dbus_loop_remove_timeout (bus_context_get_loop (pending_activation->activation->context),
- pending_activation->timeout,
- handle_timeout_callback, pending_activation);
+ pending_activation->timeout);
pending_activation->timeout_added = FALSE;
}
}
if (!_dbus_loop_add_timeout (bus_context_get_loop (activation->context),
- pending_activation->timeout,
- handle_timeout_callback,
- pending_activation,
- NULL))
+ pending_activation->timeout))
{
_dbus_verbose ("Failed to add timeout for pending activation\n");
watch, server_watch_callback, server);
}
-
-static void
-server_timeout_callback (DBusTimeout *timeout,
- void *data)
-{
- /* can return FALSE on OOM but we just let it fire again later */
- dbus_timeout_handle (timeout);
-}
-
static dbus_bool_t
add_server_timeout (DBusTimeout *timeout,
void *data)
context = server_get_context (server);
- return _dbus_loop_add_timeout (context->loop,
- timeout, server_timeout_callback, server, NULL);
+ return _dbus_loop_add_timeout (context->loop, timeout);
}
static void
context = server_get_context (server);
- _dbus_loop_remove_timeout (context->loop,
- timeout, server_timeout_callback, server);
+ _dbus_loop_remove_timeout (context->loop, timeout);
}
static void
watch, connection_watch_callback, connection);
}
-static void
-connection_timeout_callback (DBusTimeout *timeout,
- void *data)
-{
- /* DBusConnection *connection = data; */
-
- /* can return FALSE on OOM but we just let it fire again later */
- dbus_timeout_handle (timeout);
-}
-
static dbus_bool_t
add_connection_timeout (DBusTimeout *timeout,
void *data)
{
DBusConnection *connection = data;
- return _dbus_loop_add_timeout (connection_get_loop (connection),
- timeout, connection_timeout_callback, connection, NULL);
+ return _dbus_loop_add_timeout (connection_get_loop (connection), timeout);
}
static void
{
DBusConnection *connection = data;
- _dbus_loop_remove_timeout (connection_get_loop (connection),
- timeout, connection_timeout_callback, connection);
+ _dbus_loop_remove_timeout (connection_get_loop (connection), timeout);
}
static void
goto failed_4;
if (!_dbus_loop_add_timeout (bus_context_get_loop (context),
- connections->expire_timeout,
- call_timeout_callback, NULL, NULL))
+ connections->expire_timeout))
goto failed_5;
connections->refcount = 1;
bus_expire_list_free (connections->pending_replies);
_dbus_loop_remove_timeout (bus_context_get_loop (connections->context),
- connections->expire_timeout,
- call_timeout_callback, NULL);
+ connections->expire_timeout);
_dbus_timeout_unref (connections->expire_timeout);
static dbus_bool_t expire_timeout_handler (void *data);
-static void
-call_timeout_callback (DBusTimeout *timeout,
- void *data)
-{
- /* can return FALSE on OOM but we just let it fire again later */
- dbus_timeout_handle (timeout);
-}
-
BusExpireList*
bus_expire_list_new (DBusLoop *loop,
int expire_after,
_dbus_timeout_set_enabled (list->timeout, FALSE);
- if (!_dbus_loop_add_timeout (list->loop,
- list->timeout,
- call_timeout_callback, NULL, NULL))
+ if (!_dbus_loop_add_timeout (list->loop, list->timeout))
goto failed;
return list;
{
_dbus_assert (list->items == NULL);
- _dbus_loop_remove_timeout (list->loop, list->timeout,
- call_timeout_callback, NULL);
+ _dbus_loop_remove_timeout (list->loop, list->timeout);
_dbus_timeout_unref (list->timeout);
watch, client_watch_callback, connection);
}
-static void
-client_timeout_callback (DBusTimeout *timeout,
- void *data)
-{
- DBusConnection *connection = data;
-
- /* can return FALSE on OOM but we just let it fire again later */
- dbus_timeout_handle (timeout);
-}
-
static dbus_bool_t
add_client_timeout (DBusTimeout *timeout,
void *data)
{
DBusConnection *connection = data;
- return _dbus_loop_add_timeout (client_loop, timeout, client_timeout_callback, connection, NULL);
+ return _dbus_loop_add_timeout (client_loop, timeout);
}
static void
{
DBusConnection *connection = data;
- _dbus_loop_remove_timeout (client_loop, timeout, client_timeout_callback, connection);
+ _dbus_loop_remove_timeout (client_loop, timeout);
}
static DBusHandlerResult
{
int refcount;
CallbackType type;
- void *data;
- DBusFreeFunction free_data_func;
} Callback;
typedef struct
Callback callback;
DBusWatchFunction function;
DBusWatch *watch;
+ void *data;
+ DBusFreeFunction free_data_func;
/* last watch handle failed due to OOM */
unsigned int last_iteration_oom : 1;
} WatchCallback;
{
Callback callback;
DBusTimeout *timeout;
- DBusTimeoutFunction function;
unsigned long last_tv_sec;
unsigned long last_tv_usec;
} TimeoutCallback;
cb->last_iteration_oom = FALSE;
cb->callback.refcount = 1;
cb->callback.type = CALLBACK_WATCH;
- cb->callback.data = data;
- cb->callback.free_data_func = free_data_func;
+ cb->data = data;
+ cb->free_data_func = free_data_func;
return cb;
}
static TimeoutCallback*
-timeout_callback_new (DBusTimeout *timeout,
- DBusTimeoutFunction function,
- void *data,
- DBusFreeFunction free_data_func)
+timeout_callback_new (DBusTimeout *timeout)
{
TimeoutCallback *cb;
return NULL;
cb->timeout = timeout;
- cb->function = function;
_dbus_get_current_time (&cb->last_tv_sec,
&cb->last_tv_usec);
cb->callback.refcount = 1;
cb->callback.type = CALLBACK_TIMEOUT;
- cb->callback.data = data;
- cb->callback.free_data_func = free_data_func;
return cb;
}
if (cb->refcount == 0)
{
- if (cb->free_data_func)
- (* cb->free_data_func) (cb->data);
+ if (cb->type == CALLBACK_WATCH && WATCH_CALLBACK (cb)->free_data_func)
+ (WATCH_CALLBACK (cb)->free_data_func) (WATCH_CALLBACK (cb)->data);
dbus_free (cb);
}
if (!add_callback (loop, (Callback*) wcb))
{
- wcb->callback.free_data_func = NULL; /* don't want to have this side effect */
+ wcb->free_data_func = NULL; /* don't want to have this side effect */
callback_unref ((Callback*) wcb);
return FALSE;
}
if (this->type == CALLBACK_WATCH &&
WATCH_CALLBACK (this)->watch == watch &&
- this->data == data &&
+ WATCH_CALLBACK (this)->data == data &&
WATCH_CALLBACK (this)->function == function)
{
remove_callback (loop, link);
}
dbus_bool_t
-_dbus_loop_add_timeout (DBusLoop *loop,
- DBusTimeout *timeout,
- DBusTimeoutFunction function,
- void *data,
- DBusFreeFunction free_data_func)
+_dbus_loop_add_timeout (DBusLoop *loop,
+ DBusTimeout *timeout)
{
TimeoutCallback *tcb;
- tcb = timeout_callback_new (timeout, function, data, free_data_func);
+ tcb = timeout_callback_new (timeout);
if (tcb == NULL)
return FALSE;
if (!add_callback (loop, (Callback*) tcb))
{
- tcb->callback.free_data_func = NULL; /* don't want to have this side effect */
callback_unref ((Callback*) tcb);
return FALSE;
}
}
void
-_dbus_loop_remove_timeout (DBusLoop *loop,
- DBusTimeout *timeout,
- DBusTimeoutFunction function,
- void *data)
+_dbus_loop_remove_timeout (DBusLoop *loop,
+ DBusTimeout *timeout)
{
DBusList *link;
Callback *this = link->data;
if (this->type == CALLBACK_TIMEOUT &&
- TIMEOUT_CALLBACK (this)->timeout == timeout &&
- this->data == data &&
- TIMEOUT_CALLBACK (this)->function == function)
+ TIMEOUT_CALLBACK (this)->timeout == timeout)
{
remove_callback (loop, link);
link = next;
}
- _dbus_warn ("could not find timeout %p function %p data %p to remove\n",
- timeout, (void *)function, data);
+ _dbus_warn ("could not find timeout %p to remove\n", timeout);
}
/* Convolutions from GLib, there really must be a better way
_dbus_warn ("watch %p was invalidated but not removed; "
"removing it now\n", wcb->watch);
_dbus_loop_remove_watch (loop, wcb->watch, wcb->function,
- ((Callback *)wcb)->data);
+ wcb->data);
}
else if (dbus_watch_get_enabled (wcb->watch))
{
#if MAINLOOP_SPEW
_dbus_verbose (" invoking timeout\n");
#endif
-
- (* tcb->function) (tcb->timeout,
- cb->data);
+
+ /* can theoretically return FALSE on OOM, but we just
+ * let it fire again later - in practice that's what
+ * every wrapper callback in dbus-daemon used to do */
+ dbus_timeout_handle (tcb->timeout);
retval = TRUE;
}
if (condition != 0 &&
dbus_watch_get_enabled (wcb->watch))
{
- if (!(* wcb->function) (wcb->watch,
- condition,
- ((Callback*)wcb)->data))
+ if (!(* wcb->function) (wcb->watch, condition, wcb->data))
wcb->last_iteration_oom = TRUE;
#if MAINLOOP_SPEW
_dbus_warn ("invalid request, socket fd %d not open\n",
fds[i].fd);
_dbus_loop_remove_watch (loop, watch, wcb->function,
- ((Callback *)wcb)->data);
+ wcb->data);
_dbus_watch_invalidate (watch);
_dbus_watch_unref (watch);
}
typedef dbus_bool_t (* DBusWatchFunction) (DBusWatch *watch,
unsigned int condition,
void *data);
-typedef void (* DBusTimeoutFunction) (DBusTimeout *timeout,
- void *data);
DBusLoop* _dbus_loop_new (void);
DBusLoop* _dbus_loop_ref (DBusLoop *loop);
DBusWatchFunction function,
void *data);
dbus_bool_t _dbus_loop_add_timeout (DBusLoop *loop,
- DBusTimeout *timeout,
- DBusTimeoutFunction function,
- void *data,
- DBusFreeFunction free_data_func);
+ DBusTimeout *timeout);
void _dbus_loop_remove_timeout (DBusLoop *loop,
- DBusTimeout *timeout,
- DBusTimeoutFunction function,
- void *data);
+ DBusTimeout *timeout);
dbus_bool_t _dbus_loop_queue_dispatch (DBusLoop *loop,
DBusConnection *connection);
watch, connection_watch_callback, cd);
}
-static void
-connection_timeout_callback (DBusTimeout *timeout,
- void *data)
-{
- /* Can return FALSE on OOM but we just let it fire again later */
- dbus_timeout_handle (timeout);
-}
-
static dbus_bool_t
add_timeout (DBusTimeout *timeout,
void *data)
{
CData *cd = data;
- return _dbus_loop_add_timeout (cd->loop,
- timeout, connection_timeout_callback, cd, NULL);
+ return _dbus_loop_add_timeout (cd->loop, timeout);
}
static void
{
CData *cd = data;
- _dbus_loop_remove_timeout (cd->loop,
- timeout, connection_timeout_callback, cd);
+ _dbus_loop_remove_timeout (cd->loop, timeout);
}
static void
watch, server_watch_callback, context);
}
-static void
-server_timeout_callback (DBusTimeout *timeout,
- void *data)
-{
- /* can return FALSE on OOM but we just let it fire again later */
- dbus_timeout_handle (timeout);
-}
-
static dbus_bool_t
add_server_timeout (DBusTimeout *timeout,
void *data)
{
ServerData *context = data;
- return _dbus_loop_add_timeout (context->loop,
- timeout, server_timeout_callback, context, NULL);
+ return _dbus_loop_add_timeout (context->loop, timeout);
}
static void
{
ServerData *context = data;
- _dbus_loop_remove_timeout (context->loop,
- timeout, server_timeout_callback, context);
+ _dbus_loop_remove_timeout (context->loop, timeout);
}
dbus_bool_t