summaryrefslogtreecommitdiffstats
path: root/bus/driver.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2004-11-26 01:53:13 +0000
committerHavoc Pennington <hp@redhat.com>2004-11-26 01:53:13 +0000
commitdbdea921b5967ed25b24a9e5af5d6a3db54c5ec7 (patch)
treee9224f077138d6e7d7c8ffe4dc4fb68ab6e0c355 /bus/driver.c
parent2ce2ab4368d9b037c51cd3cb4ef39e3f7ade8b00 (diff)
2004-11-25 Havoc Pennington <hp@redhat.com>
The primary change here is to always write() once before adding the write watch, which gives us about a 10% performance increase. * dbus/dbus-transport-unix.c: a number of modifications to cope with removing messages_pending (check_write_watch): properly handle DBUS_AUTH_STATE_WAITING_FOR_MEMORY; adapt to removal of messages_pending stuff (check_read_watch): properly handle WAITING_FOR_MEMORY and AUTHENTICATED cases (unix_handle_watch): after writing, see if the write watch can be removed (unix_do_iteration): assert that write_watch/read_watch are non-NULL rather than testing that they aren't, since they aren't allowed to be NULL. check_write_watch() at the end so we add the watch if we did not finish writing (e.g. got EAGAIN) * dbus/dbus-transport-protected.h: remove messages_pending call, since it resulted in too much inefficient watch adding/removing; instead we now require that the transport user does an iteration after queueing outgoing messages, and after trying the first write() we add a write watch if we got EAGAIN or exceeded our max bytes to write per iteration setting * dbus/dbus-string.c (_dbus_string_validate_signature): add this function * dbus/dbus-server-unix.c (unix_finalize): the socket name was freed and then accessed, valgrind flagged this bug, fix it * dbus/dbus-message.c: fix several bugs where HEADER_FIELD_LAST was taken as the last valid field plus 1, where really it is equal to the last valid field. Corrects some message corruption issues. * dbus/dbus-mainloop.c: verbosity changes * dbus/dbus-keyring.c (_dbus_keyring_new_homedir): handle OOM instead of aborting in one of the test codepaths * dbus/dbus-internals.c (_dbus_verbose_real): fix a bug that caused not printing the pid ever again if a verbose was missing the newline at the end (_dbus_header_field_to_string): add HEADER_FIELD_SIGNATURE * dbus/dbus-connection.c: verbosity changes; (dbus_connection_has_messages_to_send): new function (_dbus_connection_message_sent): no longer call transport->messages_pending (_dbus_connection_send_preallocated_unlocked): do one iteration to try to write() immediately, so we can avoid the write watch. This is the core purpose of this patchset (_dbus_connection_get_dispatch_status_unlocked): if disconnected, dump the outgoing message queue, so nobody will get confused trying to send them or thinking stuff is pending to be sent * bus/test.c: verbosity changes * bus/driver.c: verbosity/assertion changes * bus/dispatch.c: a bunch of little tweaks to get it working again because this patchset changes when/where you need to block.
Diffstat (limited to 'bus/driver.c')
-rw-r--r--bus/driver.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/bus/driver.c b/bus/driver.c
index b426912f..dc640396 100644
--- a/bus/driver.c
+++ b/bus/driver.c
@@ -2,7 +2,7 @@
/* driver.c Bus client (driver)
*
* Copyright (C) 2003 CodeFactory AB
- * Copyright (C) 2003 Red Hat, Inc.
+ * Copyright (C) 2003, 2004 Red Hat, Inc.
*
* Licensed under the Academic Free License version 2.1
*
@@ -51,7 +51,8 @@ bus_driver_send_service_owner_changed (const char *service_name,
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
- _dbus_verbose ("sending service owner changed: %s [%s -> %s]", service_name,
+ _dbus_verbose ("sending service owner changed: %s [%s -> %s]\n",
+ service_name,
old_owner ? old_owner : null_service,
new_owner ? new_owner : null_service);
@@ -75,6 +76,8 @@ bus_driver_send_service_owner_changed (const char *service_name,
DBUS_TYPE_INVALID))
goto oom;
+ _dbus_assert (dbus_message_has_signature (message, "sss"));
+
retval = bus_dispatch_matches (transaction, NULL, NULL, message, error);
dbus_message_unref (message);
@@ -346,6 +349,8 @@ bus_driver_send_welcome_message (DBusConnection *connection,
return FALSE;
}
+ _dbus_assert (dbus_message_has_signature (welcome, "s"));
+
if (!bus_transaction_send_from_driver (transaction, connection, welcome))
{
dbus_message_unref (welcome);