Fix D-Bus timeout handling

Timeouts should also be removed in the remove_timeout callback in
addition to the timeout_handler_free function. This is how dbus-glib
does it and it seems to prevent crashes in certain situations.
This commit is contained in:
Daniel Orstadius 2009-12-16 11:23:46 +02:00 committed by Marcel Holtmann
parent 8e1c3fe2bc
commit 9c688fff68
1 changed files with 16 additions and 1 deletions

View File

@ -183,7 +183,11 @@ static void timeout_handler_free(void *data)
if (!handler)
return;
g_source_remove(handler->id);
if (handler->id > 0) {
g_source_remove(handler->id);
handler->id = 0;
}
g_free(handler);
}
@ -207,6 +211,17 @@ static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data)
static void remove_timeout(DBusTimeout *timeout, void *data)
{
timeout_handler_t *handler;
handler = dbus_timeout_get_data(timeout);
if (!handler)
return;
if (handler->id > 0) {
g_source_remove(handler->id);
handler->id = 0;
}
}
static void timeout_toggled(DBusTimeout *timeout, void *data)