/**
* Default timeout interval when reading or writing.
*/
-#define DEFAULT_INTERVAL 10
+#define DEFAULT_INTERVAL 1
/**
* Opaque object representing a debug server implementation.
{
}
-static void
+static dbus_bool_t
debug_handle_watch (DBusServer *server,
DBusWatch *watch,
unsigned int flags)
{
+ return TRUE;
}
static void
{
DBusServer *server;
DBusTransport *transport;
-
+ DBusTimeout *timeout;
} ServerAndTransport;
-static void
+static dbus_bool_t
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 FALSE;
connection = _dbus_connection_new_for_transport (transport);
_dbus_transport_unref (transport);
if (connection == NULL)
- return;
+ return FALSE;
/* See if someone wants to handle this new connection,
* self-referencing for paranoia
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);
+
+ return TRUE;
}
/**
_dbus_server_debug_accept_transport (DBusServer *server,
DBusTransport *transport)
{
- DBusTimeout *timeout;
- ServerAndTransport *st;
+ ServerAndTransport *st = NULL;
st = dbus_new (ServerAndTransport, 1);
if (st == NULL)
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)
- {
- dbus_free (st);
- return FALSE;
- }
-
- if (!_dbus_server_add_timeout (server, timeout))
- {
- _dbus_timeout_unref (timeout);
- return FALSE;
- }
+ if (st->timeout == NULL)
+ goto failed;
+ if (!_dbus_server_add_timeout (server, st->timeout))
+ goto failed;
+
return TRUE;
+
+ failed:
+ if (st->timeout)
+ _dbus_timeout_unref (st->timeout);
+ dbus_free (st);
+ return FALSE;
}
/** @} */