[at-spi2-core] Dispatch dbus messages after method calls when no main loop running



commit ec424c4b688f002af44dd052f4a29feb3868921d
Author: Mike Gorse <mgorse linux-sh69 site>
Date:   Wed Aug 21 14:33:18 2013 -0500

    Dispatch dbus messages after method calls when no main loop running
    
    If no main loop is running, then the dbus connection's incoming message
    queue was never emptied, so with, eg, dogtail,
    dbus_connection_send_with_reply_and_block would take longer and longer
    to look through the message queue to find a reply. This also effectively
    led to a memory leak.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=701145

 atspi/atspi-misc.c |    2 ++
 dbind/dbind.c      |    8 +++++++-
 2 files changed, 9 insertions(+), 1 deletions(-)
---
diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c
index 17f9bb2..190a3eb 100644
--- a/atspi/atspi-misc.c
+++ b/atspi/atspi-misc.c
@@ -1518,6 +1518,8 @@ get_accessibility_bus_address_dbus (void)
                                                     message,
                                                     -1,
                                                     &error);
+  if (g_main_depth () == 0)
+    while (dbus_connection_dispatch (session_bus) == DBUS_DISPATCH_DATA_REMAINS);
   dbus_message_unref (message);
 
   if (!reply)
diff --git a/dbind/dbind.c b/dbind/dbind.c
index b83071a..f10b9cd 100644
--- a/dbind/dbind.c
+++ b/dbind/dbind.c
@@ -71,7 +71,13 @@ dbind_send_and_allow_reentry (DBusConnection * bus, DBusMessage * message, DBusE
 
   if (unique_name && destination &&
       strcmp (destination, unique_name) != 0)
-    return dbus_connection_send_with_reply_and_block (bus, message, dbind_timeout, error);
+    {
+      ret = dbus_connection_send_with_reply_and_block (bus, message,
+                                                       dbind_timeout, error);
+      if (g_main_depth () == 0)
+      while (dbus_connection_dispatch (bus) == DBUS_DISPATCH_DATA_REMAINS);
+      return ret;
+    }
 
   closure = g_new0 (SpiReentrantCallClosure, 1);
   closure->reply = NULL;


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