diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | bus/dispatch.c | 18 | ||||
-rw-r--r-- | bus/driver.c | 2 | ||||
-rw-r--r-- | dbus/dbus-bus.c | 35 | ||||
-rw-r--r-- | dbus/dbus-connection.c | 16 | ||||
-rw-r--r-- | dbus/dbus-internals.c | 6 | ||||
-rw-r--r-- | test/test-service.c | 2 | ||||
-rw-r--r-- | test/test-utils.c | 6 |
8 files changed, 75 insertions, 23 deletions
@@ -1,3 +1,16 @@ +2003-04-09 Havoc Pennington <hp@redhat.com> + + * dbus/dbus-bus.c (dbus_bus_register): fix up error handling and + a memory leak + + * bus/dispatch.c (check_service_activated): fix bug in test + + * dbus/dbus-mainloop.c (check_timeout): fix this up + + * dbus/dbus-internals.c (_dbus_verbose_real): include PID in + verbose output so we can sort out output from different processes, + e.g. in the activation case. + 2003-04-08 Colin Walters <walters@gnu.org> * bus/bus.c (struct BusContext) [pidfile]: New member, to store diff --git a/bus/dispatch.c b/bus/dispatch.c index 4761a4bd..0b9f9731 100644 --- a/bus/dispatch.c +++ b/bus/dispatch.c @@ -1111,9 +1111,10 @@ check_service_activated (BusContext *context, goto recheck_service_created; } - else if (require_base_service) + else if (require_base_service && !already_saw_base_created) { - _dbus_warn ("Did not get a ServiceCreated for a base service\n"); + _dbus_warn ("Did not get a ServiceCreated for a base service, it was for %s instead\n", + service_name); goto out; } @@ -1228,7 +1229,7 @@ check_service_deactivated (BusContext *context, /* Now we are expecting ServiceDeleted messages for the base * service and the activated_name. The base service - * notification is required to come second. + * notification is required to come last. */ csdd.expected_service_name = activated_name; csdd.failed = FALSE; @@ -1251,6 +1252,8 @@ check_service_deactivated (BusContext *context, _dbus_warn ("Messages were left over after verifying results of service exiting\n"); goto out; } + + retval = TRUE; out: if (message) @@ -1351,6 +1354,13 @@ check_existent_service_activation (BusContext *context, { ; /* good, this is expected also */ } + else if (dbus_message_name_is (message, + DBUS_ERROR_SPAWN_CHILD_EXITED)) + { + ; /* good, this is expected also (child will exit if for example we don't + * have memory to register it) + */ + } else { _dbus_warn ("Did not expect error %s\n", @@ -1401,7 +1411,7 @@ check_existent_service_activation (BusContext *context, /* and process everything again */ bus_test_run_everything (context); - + if (!check_service_deactivated (context, connection, EXISTENT_SERVICE_NAME, base_service)) goto out; diff --git a/bus/driver.c b/bus/driver.c index 31b848e9..a3fe7c59 100644 --- a/bus/driver.c +++ b/bus/driver.c @@ -467,6 +467,8 @@ bus_driver_handle_acquire_service (DBusConnection *connection, dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED, "Cannot acquire a service starting with ':' such as \"%s\"", name); + + _dbus_verbose ("Attempt to acquire invalid base service name \"%s\"", name); goto out; } diff --git a/dbus/dbus-bus.c b/dbus/dbus-bus.c index 74703866..e7b4c06e 100644 --- a/dbus/dbus-bus.c +++ b/dbus/dbus-bus.c @@ -428,8 +428,11 @@ dbus_bus_register (DBusConnection *connection, DBusMessage *message, *reply; char *name; BusData *bd; - + dbus_bool_t retval; + _DBUS_ASSERT_ERROR_IS_CLEAR (error); + + retval = FALSE; bd = ensure_bus_data (connection); if (bd == NULL) @@ -461,22 +464,26 @@ dbus_bus_register (DBusConnection *connection, dbus_message_unref (message); if (reply == NULL) - { - _DBUS_ASSERT_ERROR_IS_SET (error); - return FALSE; - } + goto out; + else if (dbus_set_error_from_message (error, reply)) + goto out; + else if (!dbus_message_get_args (reply, error, + DBUS_TYPE_STRING, &name, + 0)) + goto out; + + bd->base_service = name; - if (!dbus_message_get_args (reply, error, - DBUS_TYPE_STRING, &name, - 0)) - { - _DBUS_ASSERT_ERROR_IS_SET (error); - return FALSE; - } + retval = TRUE; + + out: + if (reply) + dbus_message_unref (reply); - bd->base_service = name; + if (!retval) + _DBUS_ASSERT_ERROR_IS_SET (error); - return TRUE; + return retval; } diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index d92268ba..60c075fe 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -1461,8 +1461,9 @@ dbus_connection_send_with_reply_and_block (DBusConnection *connection, end_tv_sec += end_tv_usec / _DBUS_USEC_PER_SECOND; end_tv_usec = end_tv_usec % _DBUS_USEC_PER_SECOND; - _dbus_verbose ("will block %d milliseconds from %ld sec %ld usec to %ld sec %ld usec\n", + _dbus_verbose ("dbus_connection_send_with_reply_and_block(): will block %d milliseconds for reply serial %d from %ld sec %ld usec to %ld sec %ld usec\n", timeout_milliseconds, + client_serial, start_tv_sec, start_tv_usec, end_tv_sec, end_tv_usec); @@ -1489,6 +1490,10 @@ dbus_connection_send_with_reply_and_block (DBusConnection *connection, if (reply != NULL) { dbus_mutex_unlock (connection->mutex); + + _dbus_verbose ("dbus_connection_send_with_reply_and_block(): got reply %s\n", + dbus_message_get_name (reply)); + return reply; } } @@ -1504,7 +1509,7 @@ dbus_connection_send_with_reply_and_block (DBusConnection *connection, { timeout_milliseconds = (end_tv_sec - tv_sec) * 1000 + (end_tv_usec - tv_usec) / 1000; - _dbus_verbose ("%d milliseconds remain\n", timeout_milliseconds); + _dbus_verbose ("dbus_connection_send_with_reply_and_block(): %d milliseconds remain\n", timeout_milliseconds); _dbus_assert (timeout_milliseconds >= 0); if (status == DBUS_DISPATCH_NEED_MEMORY) @@ -1513,6 +1518,8 @@ dbus_connection_send_with_reply_and_block (DBusConnection *connection, * we may already have a reply in the buffer and just can't process * it. */ + _dbus_verbose ("dbus_connection_send_with_reply_and_block() waiting for more memory\n"); + if (timeout_milliseconds < 100) ; /* just busy loop */ else if (timeout_milliseconds <= 1000) @@ -1531,12 +1538,15 @@ dbus_connection_send_with_reply_and_block (DBusConnection *connection, goto recheck_status; } + + _dbus_verbose ("dbus_connection_send_with_reply_and_block(): Waited %ld milliseconds and got no reply\n", + (tv_sec - start_tv_sec) * 1000 + (tv_usec - start_tv_usec) / 1000); if (dbus_connection_get_is_connected (connection)) dbus_set_error (error, DBUS_ERROR_NO_REPLY, "Message did not receive a reply"); else dbus_set_error (error, DBUS_ERROR_DISCONNECTED, "Disconnected prior to receiving a reply"); - + dbus_mutex_unlock (connection->mutex); return NULL; diff --git a/dbus/dbus-internals.c b/dbus/dbus-internals.c index de98c1fc..6a662e5d 100644 --- a/dbus/dbus-internals.c +++ b/dbus/dbus-internals.c @@ -189,7 +189,8 @@ _dbus_verbose_real (const char *format, va_list args; static dbus_bool_t verbose = TRUE; static dbus_bool_t initted = FALSE; - + static unsigned long pid; + /* things are written a bit oddly here so that * in the non-verbose case we just have the one * conditional and return immediately. @@ -200,10 +201,13 @@ _dbus_verbose_real (const char *format, if (!initted) { verbose = _dbus_getenv ("DBUS_VERBOSE") != NULL; + pid = _dbus_getpid (); initted = TRUE; if (!verbose) return; } + + fprintf (stderr, "%lu: ", pid); va_start (args, format); vfprintf (stderr, format, args); diff --git a/test/test-service.c b/test/test-service.c index 56764dea..732e5b13 100644 --- a/test/test-service.c +++ b/test/test-service.c @@ -154,7 +154,7 @@ main (int argc, dbus_shutdown (); - printf ("*** Test service exiting\n"); + _dbus_verbose ("*** Test service exiting\n"); return 0; } diff --git a/test/test-utils.c b/test/test-utils.c index 62963f38..c7d4aa59 100644 --- a/test/test-utils.c +++ b/test/test-utils.c @@ -34,10 +34,16 @@ connection_watch_callback (DBusWatch *watch, dbus_bool_t retval; dbus_connection_ref (cd->connection); + + _dbus_verbose (" Handling watch\n"); retval = dbus_connection_handle_watch (cd->connection, watch, condition); + _dbus_verbose (" Watch handled\n"); + test_connection_dispatch_all_messages (cd->connection); + + _dbus_verbose (" Dispatched all\n"); dbus_connection_unref (cd->connection); |