[glib] GSettings tool: work-around GDBus issue



commit 849684e540bb714bc60c2bce3a086e5ffb8933c0
Author: Ryan Lortie <desrt desrt ca>
Date:   Sun May 16 13:03:34 2010 +0200

    GSettings tool: work-around GDBus issue
    
    There is currently no way (near as I can tell) to ensure that a message
    has been sent when using GDBus.  If we exit() before we are sure, then
    it is very possible that the message isn't sent at all.  This behaviour
    was observed when using the GSettings commandline tool with dconf.
    
    A quick and dirty workaround for now.

 gio/gsettings-tool.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)
---
diff --git a/gio/gsettings-tool.c b/gio/gsettings-tool.c
index 257c965..fdaacdc 100644
--- a/gio/gsettings-tool.c
+++ b/gio/gsettings-tool.c
@@ -215,6 +215,24 @@ handle_set (gint   *argc,
 
   ret = 0;
 
+  /* XXX: workaround for now
+   *
+   * if we exit() so quickly, GDBus may not have had a chance to
+   * actually send the message (since we're using it async).
+   *
+   * GDBusConnection has no API to sync or wait for messages to be sent,
+   * so we send a meaningless message and wait for the reply to ensure
+   * that all messages that came before must have been sent.
+   */
+  {
+    GDBusConnection *session;
+
+    session = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+    g_dbus_connection_call_sync (session, "org.gtk.DoesNotExist", "/",
+                                 "org.gtk.DoesNotExist", "Workaround",
+                                 g_variant_new ("()"), 0, -1, NULL, NULL);
+  }
+
  out:
   g_option_context_free (context);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]