gdesktopappinfo: Asynchronously flush after sending notification
authorColin Walters <walters@verbum.org>
Fri, 4 Feb 2011 20:37:51 +0000 (15:37 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 8 Feb 2011 04:37:14 +0000 (23:37 -0500)
If we were the initial connection owner, unref will destroy the
connection immediately, and we may lose messages.  Asynchronously
flush to avoid that.

https://bugzilla.gnome.org/show_bug.cgi?id=641411

gio/gdesktopappinfo.c

index f557538..1fe5ecf 100644 (file)
@@ -1096,7 +1096,14 @@ _g_desktop_app_info_launch_uris_internal (GAppInfo                   *appinfo,
    * after launching an app.  See http://bugzilla.gnome.org/606960
    */
   if (session_bus != NULL)
-    g_object_unref (session_bus);
+    {
+      /* This asynchronous flush holds a reference until it completes,
+       * which ensures that the following unref won't immediately kill
+       * the connection if we were the initial owner.
+       */
+      g_dbus_connection_flush (session_bus, NULL, NULL, NULL);
+      g_object_unref (session_bus);
+    }
 
   completed = TRUE;