summaryrefslogtreecommitdiffstats
path: root/bus/dispatch.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-10-28 23:51:24 +0000
committerHavoc Pennington <hp@redhat.com>2003-10-28 23:51:24 +0000
commitbebc830fc47cbf191f7518dfd0cd88c4938c2dbf (patch)
tree929dcab1c067ca35be2d51ce8a729098bf33dc69 /bus/dispatch.c
parente11ae7246655e59f8e04d1ffcb3788176a6d98b8 (diff)
2003-10-28 Havoc Pennington <hp@redhat.com>
* bus/expirelist.c (do_expiration_with_current_time): detect failure of the expire_func due to OOM * bus/connection.c (bus_pending_reply_expired): return FALSE on OOM * bus/dispatch.c (check_send_exit_to_service): fix to handle the NoReply error that's now created by the bus when the service exits
Diffstat (limited to 'bus/dispatch.c')
-rw-r--r--bus/dispatch.c76
1 files changed, 59 insertions, 17 deletions
diff --git a/bus/dispatch.c b/bus/dispatch.c
index 26dd4fc8..c5331915 100644
--- a/bus/dispatch.c
+++ b/bus/dispatch.c
@@ -415,16 +415,20 @@ warn_unexpected_real (DBusConnection *connection,
const char *function,
int line)
{
- _dbus_warn ("%s:%d received message interface \"%s\" member \"%s\" error name \"%s\" on %p, expecting %s\n",
- function, line,
- dbus_message_get_interface (message) ?
- dbus_message_get_interface (message) : "(unset)",
- dbus_message_get_member (message) ?
- dbus_message_get_member (message) : "(unset)",
- dbus_message_get_error_name (message) ?
- dbus_message_get_error_name (message) : "(unset)",
- connection,
- expected);
+ if (message)
+ _dbus_warn ("%s:%d received message interface \"%s\" member \"%s\" error name \"%s\" on %p, expecting %s\n",
+ function, line,
+ dbus_message_get_interface (message) ?
+ dbus_message_get_interface (message) : "(unset)",
+ dbus_message_get_member (message) ?
+ dbus_message_get_member (message) : "(unset)",
+ dbus_message_get_error_name (message) ?
+ dbus_message_get_error_name (message) : "(unset)",
+ connection,
+ expected);
+ else
+ _dbus_warn ("%s:%d received no message on %p, expecting %s\n",
+ function, line, connection, expected);
}
#define warn_unexpected(connection, message, expected) \
@@ -1428,12 +1432,6 @@ check_service_deactivated (BusContext *context,
if (csdd.failed)
goto out;
-
- if (!check_no_leftovers (context))
- {
- _dbus_warn ("Messages were left over after verifying results of service exiting\n");
- goto out;
- }
retval = TRUE;
@@ -1519,6 +1517,13 @@ check_send_exit_to_service (BusContext *context,
message = pop_message_waiting_for_memory (connection);
_dbus_assert (message != NULL);
+ if (dbus_message_get_reply_serial (message) != serial)
+ {
+ warn_unexpected (connection, message,
+ "error with the correct reply serial");
+ goto out;
+ }
+
if (!dbus_message_is_error (message,
DBUS_ERROR_NO_MEMORY))
{
@@ -1540,8 +1545,45 @@ check_send_exit_to_service (BusContext *context,
if (!check_service_deactivated (context, connection,
service_name, base_service))
goto out;
- }
+ /* Should now have a NoReply error from the Exit() method
+ * call; it should have come after all the deactivation
+ * stuff.
+ */
+ message = pop_message_waiting_for_memory (connection);
+
+ if (message == NULL)
+ {
+ warn_unexpected (connection, NULL,
+ "reply to Exit() method call");
+ goto out;
+ }
+ if (!dbus_message_is_error (message,
+ DBUS_ERROR_NO_REPLY))
+ {
+ warn_unexpected (connection, NULL,
+ "NoReply error from Exit() method call");
+ goto out;
+ }
+
+ if (dbus_message_get_reply_serial (message) != serial)
+ {
+ warn_unexpected (connection, message,
+ "error with the correct reply serial");
+ goto out;
+ }
+
+ _dbus_verbose ("Got error %s after test service exited\n",
+ dbus_message_get_error_name (message));
+
+ if (!check_no_leftovers (context))
+ {
+ _dbus_warn ("Messages were left over after %s\n",
+ _DBUS_FUNCTION_NAME);
+ goto out;
+ }
+ }
+
retval = TRUE;
out: