diff options
| author | David Zeuthen <davidz@redhat.com> | 2005-04-06 17:36:47 +0000 | 
|---|---|---|
| committer | David Zeuthen <davidz@redhat.com> | 2005-04-06 17:36:47 +0000 | 
| commit | 9f13881562a0b3af65f6aa2d14b5f21ff718b66e (patch) | |
| tree | 76b1e07d48a760176033a407f4753aa850fb50f6 | |
| parent | 6cd7cb575d82e4a52a20af94306f4450ecba26ff (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-- | ChangeLog | 16 | ||||
| -rw-r--r-- | glib/dbus-gmain.c | 14 | 
2 files changed, 22 insertions, 8 deletions
| @@ -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); | 
