summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-server-unix.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-server-unix.c')
-rw-r--r--dbus/dbus-server-unix.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/dbus/dbus-server-unix.c b/dbus/dbus-server-unix.c
index a181a925..88cc9ed7 100644
--- a/dbus/dbus-server-unix.c
+++ b/dbus/dbus-server-unix.c
@@ -70,7 +70,8 @@ unix_finalize (DBusServer *server)
* us to drop the last ref to the connection before
* disconnecting it. That is invalid.
*/
-static void
+/* Return value is just for memory, not other failures. */
+static dbus_bool_t
handle_new_client_fd (DBusServer *server,
int client_fd)
{
@@ -80,13 +81,13 @@ handle_new_client_fd (DBusServer *server,
_dbus_verbose ("Creating new client connection with fd %d\n", client_fd);
if (!_dbus_set_fd_nonblocking (client_fd, NULL))
- return;
+ return TRUE;
transport = _dbus_transport_new_for_fd (client_fd, TRUE);
if (transport == NULL)
{
close (client_fd);
- return;
+ return FALSE;
}
/* note that client_fd is now owned by the transport, and will be
@@ -97,7 +98,7 @@ handle_new_client_fd (DBusServer *server,
_dbus_transport_unref (transport);
if (connection == NULL)
- return;
+ return FALSE;
_dbus_connection_set_connection_counter (connection,
server->connection_counter);
@@ -116,9 +117,11 @@ handle_new_client_fd (DBusServer *server,
/* If no one grabbed a reference, the connection will die. */
dbus_connection_unref (connection);
+
+ return TRUE;
}
-static void
+static dbus_bool_t
unix_handle_watch (DBusServer *server,
DBusWatch *watch,
unsigned int flags)
@@ -151,7 +154,9 @@ unix_handle_watch (DBusServer *server,
else
{
_dbus_fd_set_close_on_exec (client_fd);
- handle_new_client_fd (server, client_fd);
+
+ if (!handle_new_client_fd (server, client_fd))
+ _dbus_verbose ("Rejected client connection due to lack of memory\n");
}
}
@@ -160,6 +165,8 @@ unix_handle_watch (DBusServer *server,
if (flags & DBUS_WATCH_HANGUP)
_dbus_verbose ("Hangup on server listening socket\n");
+
+ return TRUE;
}
static void