dbus/glib dbus-gmain.c,1.37,1.38

David Zeuthen david at freedesktop.org
Wed Apr 6 10:36:49 PDT 2005


Update of /cvs/dbus/dbus/glib
In directory gabe:/tmp/cvs-serv11388/glib

Modified Files:
	dbus-gmain.c 
Log Message:
2005-04-05  David Zeuthen  <davidz at 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



Index: dbus-gmain.c
===================================================================
RCS file: /cvs/dbus/dbus/glib/dbus-gmain.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- dbus-gmain.c	30 Jan 2005 23:06:32 -0000	1.37
+++ dbus-gmain.c	6 Apr 2005 17:36:47 -0000	1.38
@@ -166,14 +166,12 @@
 }
 
 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 @@
     {
       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 @@
   
   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 @@
 }
 
 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 @@
     {
       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 @@
 
   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);



More information about the dbus-commit mailing list