diff options
author | Havoc Pennington <hp@redhat.com> | 2003-03-15 02:19:02 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2003-03-15 02:19:02 +0000 |
commit | 4c95a9782c65f88e2904c44abeb734a1b00f6353 (patch) | |
tree | d81b0c3a3497a031cb642dc5126750a36a6651ff /dbus/dbus-server-debug.c | |
parent | f468907fb09e8198c4cce7e8f2ddeae8b5476b9e (diff) |
2003-03-14 Havoc Pennington <hp@redhat.com>
* dbus/dbus-memory.c: add a "detect buffer overwrites on free"
cheesy hack
* dbus/dbus-transport-debug.c: rework this a good bit to be
less complicated. hopefully still works.
* dbus/dbus-server-debug.c (handle_new_client): remove timeout
manually
* glib/dbus-gmain.c (timeout_handler): don't remove timeout
after running it
* dbus/dbus-message.c (dbus_message_copy): rename from
dbus_message_new_from_message, fix it up to copy
all the message fields, add test case
* bus/dispatch.c (bus_dispatch_test): add some more test code,
not quite passing yet
Diffstat (limited to 'dbus/dbus-server-debug.c')
-rw-r--r-- | dbus/dbus-server-debug.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/dbus/dbus-server-debug.c b/dbus/dbus-server-debug.c index 5f79e81c..b1318e32 100644 --- a/dbus/dbus-server-debug.c +++ b/dbus/dbus-server-debug.c @@ -181,7 +181,7 @@ typedef struct { DBusServer *server; DBusTransport *transport; - + DBusTimeout *timeout; } ServerAndTransport; static void @@ -190,12 +190,13 @@ handle_new_client (void *data) ServerAndTransport *st = data; DBusTransport *transport; DBusConnection *connection; + + _dbus_verbose (" new debug client transport %p connecting to server\n", + st->transport); transport = _dbus_transport_debug_server_new (st->transport); if (transport == NULL) - { - return; - } + return; connection = _dbus_connection_new_for_transport (transport); _dbus_transport_unref (transport); @@ -214,9 +215,14 @@ handle_new_client (void *data) st->server->new_connection_data); dbus_server_unref (st->server); } + + _dbus_server_remove_timeout (st->server, st->timeout); /* If no one grabbed a reference, the connection will die. */ dbus_connection_unref (connection); + + /* killing timeout frees both "st" and "timeout" */ + _dbus_timeout_unref (st->timeout); } /** @@ -231,7 +237,6 @@ dbus_bool_t _dbus_server_debug_accept_transport (DBusServer *server, DBusTransport *transport) { - DBusTimeout *timeout = NULL; ServerAndTransport *st = NULL; st = dbus_new (ServerAndTransport, 1); @@ -241,22 +246,21 @@ _dbus_server_debug_accept_transport (DBusServer *server, st->transport = transport; st->server = server; - timeout = _dbus_timeout_new (DEFAULT_INTERVAL, handle_new_client, st, dbus_free); + st->timeout = _dbus_timeout_new (DEFAULT_INTERVAL, handle_new_client, st, + dbus_free); - if (timeout == NULL) + if (st->timeout == NULL) goto failed; - if (!_dbus_server_add_timeout (server, timeout)) + if (!_dbus_server_add_timeout (server, st->timeout)) goto failed; - - _dbus_timeout_unref (timeout); return TRUE; failed: + if (st->timeout) + _dbus_timeout_unref (st->timeout); dbus_free (st); - if (timeout) - _dbus_timeout_unref (timeout); return FALSE; } |