2003-04-27 Havoc Pennington <hp@pobox.com>
[platform/upstream/dbus.git] / bus / test.c
index ded23ba..012d1d0 100644 (file)
@@ -40,16 +40,12 @@ client_watch_callback (DBusWatch     *watch,
                        unsigned int   condition,
                        void          *data)
 {
-  DBusConnection *connection = data;
-  dbus_bool_t retval;
-  
-  dbus_connection_ref (connection);
-  
-  retval = dbus_connection_handle_watch (connection, watch, condition);
-
-  dbus_connection_unref (connection);
-
-  return retval;
+  /* FIXME this can be done in dbus-mainloop.c
+   * if the code in activation.c for the babysitter
+   * watch handler is fixed.
+   */
+  return dbus_watch_handle (watch, condition);
 }
 
 static dbus_bool_t
@@ -301,9 +297,18 @@ bus_test_run_clients_loop (dbus_bool_t block_once)
 {
   if (client_loop == NULL)
     return;
+
+  /* dispatch before we block so pending dispatches
+   * won't make our block return early
+   */
+  _dbus_loop_dispatch (client_loop);
   
   /* Do one blocking wait, since we're expecting data */
-  _dbus_loop_iterate (client_loop, block_once);
+  if (block_once)
+    {
+      _dbus_verbose ("---> blocking on \"client side\"\n");
+      _dbus_loop_iterate (client_loop, TRUE);
+    }
 
   /* Then mop everything up */
   while (_dbus_loop_iterate (client_loop, FALSE))
@@ -314,8 +319,17 @@ void
 bus_test_run_bus_loop (BusContext *context,
                        dbus_bool_t block_once)
 {
+  /* dispatch before we block so pending dispatches
+   * won't make our block return early
+   */
+  _dbus_loop_dispatch (bus_context_get_loop (context));
+  
   /* Do one blocking wait, since we're expecting data */
-  _dbus_loop_iterate (bus_context_get_loop (context), block_once);
+  if (block_once)
+    {
+      _dbus_verbose ("---> blocking on \"server side\"\n");
+      _dbus_loop_iterate (bus_context_get_loop (context), TRUE);
+    }
 
   /* Then mop everything up */
   while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE))
@@ -325,16 +339,9 @@ bus_test_run_bus_loop (BusContext *context,
 void
 bus_test_run_everything (BusContext *context)
 {
-  int i;
-
-  i = 0;
-  while (i < 2)
-    {
-      while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE) ||
-             (client_loop == NULL || _dbus_loop_iterate (client_loop, FALSE)))
-        ;
-      ++i;
-    }
+  while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE) ||
+         (client_loop == NULL || _dbus_loop_iterate (client_loop, FALSE)))
+    ;
 }
 
 BusContext*