* bus/driver.c (bus_driver_handle_introspect): Add signals
authorJohn (J5) Palmieri <johnp@redhat.com>
Mon, 3 Oct 2005 19:55:56 +0000 (19:55 +0000)
committerJohn (J5) Palmieri <johnp@redhat.com>
Mon, 3 Oct 2005 19:55:56 +0000 (19:55 +0000)
  to the introspect data. (patch from Daniel P. Berrange
  <dan at berrange.com>)

* bus/dispatch.c (check_existent_ping): Add testcase for Ping

* dbus/dbus-connection.c (_dbus_connection_peer_filter,
  _dbus_connection_run_builtin_filters): Changed these to
  be unlock_no_update functions and call
  _dbus_connection_send_unlocked_no_update instead of
  dbus_connection_send to avoid locking errors.

* doc/TODO: Removed the make Ping test TODO

ChangeLog
bus/dispatch.c
bus/driver.c
dbus/dbus-connection.c
doc/TODO

index ab9c2e5..0c5d1fe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2005-10-03  John (J5) Palmieri  <johnp@redhat.com>
+
+       * bus/driver.c (bus_driver_handle_introspect): Add signals
+       to the introspect data. (patch from Daniel P. Berrange 
+       <dan at berrange.com>)
+
+       * bus/dispatch.c (check_existent_ping): Add testcase for Ping
+       
+       * dbus/dbus-connection.c (_dbus_connection_peer_filter,
+       _dbus_connection_run_builtin_filters): Changed these to
+       be unlock_no_update functions and call 
+       _dbus_connection_send_unlocked_no_update instead of
+       dbus_connection_send to avoid locking errors.
+       
+       * doc/TODO: Removed the make Ping test TODO
+       
 2005-09-26  John (J5) Palmieri  <johnp@redhat.com>
 
        * dbus/Python.pyx: Fixed memory leaks when throwing errors.
index 9bb55bf..aae7f70 100644 (file)
@@ -2877,6 +2877,65 @@ check_existent_hello_from_self (BusContext     *context,
   return TRUE;
 }
 
+/* returns TRUE if the correct thing happens,
+ * but the correct thing may include OOM errors.
+ */
+static dbus_bool_t
+check_existent_ping (BusContext     *context,
+                     DBusConnection *connection)
+{
+  DBusMessage *message;
+  dbus_uint32_t serial;
+  message = dbus_message_new_method_call (EXISTENT_SERVICE_NAME,
+                                          "/org/freedesktop/TestSuite",
+                                          "org.freedesktop.DBus.Peer",
+                                          "Ping");
+  
+  if (message == NULL)
+    return TRUE;
+
+  if (!dbus_connection_send (connection, message, &serial))
+    {
+      dbus_message_unref (message);
+      return TRUE;
+    }
+
+  dbus_message_unref (message);
+  message = NULL;
+
+  bus_test_run_everything (context);
+
+  /* Note: if this test is run in OOM mode, it will block when the bus
+   * doesn't send a reply due to OOM.
+   */
+  block_connection_until_message_from_bus (context, connection, "reply from running Ping");
+      
+  message = pop_message_waiting_for_memory (connection);
+  if (message == NULL)
+    {
+      _dbus_warn ("Failed to pop message! Should have been reply from Ping message\n");
+      return FALSE;
+    }
+
+  if (dbus_message_get_reply_serial (message) != serial)
+    {
+      _dbus_warn ("Wrong reply serial\n");
+      dbus_message_unref (message);
+      return FALSE;
+    }
+
+  if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
+    {
+      _dbus_warn ("Unexpected message return during Ping\n");
+      dbus_message_unref (message);
+      return FALSE;
+    }
+
+  dbus_message_unref (message);
+  message = NULL;
+      
+  return TRUE;
+}
 
 /* returns TRUE if the correct thing happens,
  * but the correct thing may include OOM errors.
@@ -3053,6 +3112,9 @@ check_existent_service_auto_start (BusContext     *context,
   dbus_message_unref (message);
   message = NULL;
 
+  if (!check_existent_ping (context, connection))
+    goto out;
+
   if (!check_existent_hello_from_self (context, connection))
     goto out;
 
index da4edaa..9e8df51 100644 (file)
@@ -1280,6 +1280,45 @@ bus_driver_handle_introspect (DBusConnection *connection,
       
       ++i;
     }
+
+  if (!_dbus_string_append_printf (&xml, "    <signal name=\"NameOwnerChanged\">\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "    </signal>\n"))
+    goto oom;
+
+
+
+  if (!_dbus_string_append_printf (&xml, "    <signal name=\"NameLost\">\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "    </signal>\n"))
+    goto oom;
+
+
+
+  if (!_dbus_string_append_printf (&xml, "    <signal name=\"NameAcquired\">\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "      <arg type=\"s\"/>\n"))
+    goto oom;
+  
+  if (!_dbus_string_append_printf (&xml, "    </signal>\n"))
+    goto oom;
+
+
   
   if (!_dbus_string_append (&xml, "  </interface>\n"))
     goto oom;
index ff66f5f..1e69961 100644 (file)
@@ -3363,8 +3363,8 @@ dbus_connection_get_dispatch_status (DBusConnection *connection)
 * Filter funtion for handling the Peer standard interface
 **/
 static DBusHandlerResult
-_dbus_connection_peer_filter (DBusConnection *connection,
-                              DBusMessage    *message)
+_dbus_connection_peer_filter_unlocked_no_update (DBusConnection *connection,
+                                                 DBusMessage    *message)
 {
   if (dbus_message_is_method_call (message,
                                    DBUS_INTERFACE_PEER,
@@ -3376,8 +3376,9 @@ _dbus_connection_peer_filter (DBusConnection *connection,
       ret = dbus_message_new_method_return (message);
       if (ret == NULL)
         return DBUS_HANDLER_RESULT_NEED_MEMORY;
-      
-      sent = dbus_connection_send (connection, ret, NULL);
+     
+      sent = _dbus_connection_send_unlocked_no_update (connection, ret, NULL);
+
       dbus_message_unref (ret);
 
       if (!sent)
@@ -3397,13 +3398,13 @@ _dbus_connection_peer_filter (DBusConnection *connection,
 * they should be processed from this method
 **/
 static DBusHandlerResult
-_dbus_connection_run_builtin_filters (DBusConnection *connection,
-                                      DBusMessage    *message)
+_dbus_connection_run_builtin_filters_unlocked_no_update (DBusConnection *connection,
+                                                           DBusMessage    *message)
 {
   /* We just run one filter for now but have the option to run more
      if the spec calls for it in the future */
 
-  return _dbus_connection_peer_filter (connection, message);
+  return _dbus_connection_peer_filter_unlocked_no_update (connection, message);
 }
 
 /**
@@ -3514,8 +3515,8 @@ dbus_connection_dispatch (DBusConnection *connection)
       result = DBUS_HANDLER_RESULT_HANDLED;
       goto out;
     }
-  result = _dbus_connection_run_builtin_filters (connection, message);
+
+  result = _dbus_connection_run_builtin_filters_unlocked_no_update (connection, message);
   if (result != DBUS_HANDLER_RESULT_NOT_YET_HANDLED)
     goto out;
  
index eba5293..31ef3a1 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -19,8 +19,6 @@ Important for 1.0
  - Add test harness for selinux allow/deny cf. this message
    http://lists.freedesktop.org/archives/dbus/2005-April/002506.html
 
- - Add a test case for handling the Ping message 
-
  - publish the introspection dtd at its URL
  
  - RequestName flags seem a bit strange; see the docs for dbus_bus_request_name()