summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2005-04-06 17:36:47 +0000
committerDavid Zeuthen <davidz@redhat.com>2005-04-06 17:36:47 +0000
commit9f13881562a0b3af65f6aa2d14b5f21ff718b66e (patch)
tree76b1e07d48a760176033a407f4753aa850fb50f6
parent6cd7cb575d82e4a52a20af94306f4450ecba26ff (diff)
2005-04-05 David Zeuthen <davidz@redhat.com>
Fix https://bugs.freedesktop.org/show_bug.cgi?id=2889 * glib/dbus-gmain.c: (io_handler_destroy_source): Remove from list of IO handlers of the ConnectionSetup object (timeout_handler_destroy_source): -do- for timeout handlers (io_handler_source_finalized): Don't remove from list since we now do that in io_handler_destroy_source(). Renamed from io_handler_source_destroyed (timeout_handler_source_destroyed): -do- for timeout handlers (connection_setup_free): It is now safe to iterate over all IO and timeout handlers as the _destroy_source removes them from the list synchronously
-rw-r--r--ChangeLog16
-rw-r--r--glib/dbus-gmain.c14
2 files changed, 22 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 59c3f258..70013131 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2005-04-05 David Zeuthen <davidz@redhat.com>
+
+ Fix https://bugs.freedesktop.org/show_bug.cgi?id=2889
+
+ * glib/dbus-gmain.c:
+ (io_handler_destroy_source): Remove from list of IO handlers
+ of the ConnectionSetup object
+ (timeout_handler_destroy_source): -do- for timeout handlers
+ (io_handler_source_finalized): Don't remove from list since
+ we now do that in io_handler_destroy_source(). Renamed from
+ io_handler_source_destroyed
+ (timeout_handler_source_destroyed): -do- for timeout handlers
+ (connection_setup_free): It is now safe to iterate over all
+ IO and timeout handlers as the _destroy_source removes them
+ from the list synchronously
+
2005-03-30 Havoc Pennington <hp@redhat.com>
* configure.in: change check to gtk 2.4
diff --git a/glib/dbus-gmain.c b/glib/dbus-gmain.c
index 4057482e..57be8490 100644
--- a/glib/dbus-gmain.c
+++ b/glib/dbus-gmain.c
@@ -166,14 +166,12 @@ connection_setup_new (GMainContext *context,
}
static void
-io_handler_source_destroyed (gpointer data)
+io_handler_source_finalized (gpointer data)
{
IOHandler *handler;
handler = data;
- handler->cs->ios = g_slist_remove (handler->cs->ios, handler);
-
if (handler->watch)
dbus_watch_set_data (handler->watch, NULL, NULL);
@@ -191,6 +189,7 @@ io_handler_destroy_source (void *data)
{
GSource *source = handler->source;
handler->source = NULL;
+ handler->cs->ios = g_slist_remove (handler->cs->ios, handler);
g_source_destroy (source);
}
}
@@ -281,7 +280,7 @@ connection_setup_add_watch (ConnectionSetup *cs,
handler->source = g_io_create_watch (channel, condition);
g_source_set_callback (handler->source, (GSourceFunc) io_handler_dispatch, handler,
- io_handler_source_destroyed);
+ io_handler_source_finalized);
g_source_attach (handler->source, cs->context);
cs->ios = g_slist_prepend (cs->ios, handler);
@@ -304,14 +303,12 @@ connection_setup_remove_watch (ConnectionSetup *cs,
}
static void
-timeout_handler_source_destroyed (gpointer data)
+timeout_handler_source_finalized (gpointer data)
{
TimeoutHandler *handler;
handler = data;
- handler->cs->timeouts = g_slist_remove (handler->cs->timeouts, handler);
-
if (handler->timeout)
dbus_timeout_set_data (handler->timeout, NULL, NULL);
@@ -329,6 +326,7 @@ timeout_handler_destroy_source (void *data)
{
GSource *source = handler->source;
handler->source = NULL;
+ handler->cs->timeouts = g_slist_remove (handler->cs->timeouts, handler);
g_source_destroy (source);
}
}
@@ -374,7 +372,7 @@ connection_setup_add_timeout (ConnectionSetup *cs,
handler->source = g_timeout_source_new (dbus_timeout_get_interval (timeout));
g_source_set_callback (handler->source, timeout_handler_dispatch, handler,
- timeout_handler_source_destroyed);
+ timeout_handler_source_finalized);
g_source_attach (handler->source, handler->cs->context);
cs->timeouts = g_slist_prepend (cs->timeouts, handler);