summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-server-debug.c
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-03-15 02:19:02 +0000
committerHavoc Pennington <hp@redhat.com>2003-03-15 02:19:02 +0000
commit4c95a9782c65f88e2904c44abeb734a1b00f6353 (patch)
treed81b0c3a3497a031cb642dc5126750a36a6651ff /dbus/dbus-server-debug.c
parentf468907fb09e8198c4cce7e8f2ddeae8b5476b9e (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.c28
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;
}