chiark / gitweb /
localed: shorten generate-kbd-model-map
[elogind.git] / src / logind-dbus.c
index b8f7d6718ba09de50d2d0f0f19130ad96890da34..0550d1bd1cc6b29ebe698c6d3e0a4644ed292d89 100644 (file)
@@ -381,6 +381,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
                 session = hashmap_get(m->sessions, id);
 
                 if (session) {
+                        free(id);
 
                         fifo_fd = session_create_fifo(session);
                         if (fifo_fd < 0) {
@@ -404,12 +405,16 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
                                 goto fail;
                         }
 
+                        seat = session->seat ? session->seat->id : "";
+                        vtnr = session->vtnr;
                         b = dbus_message_append_args(
                                         reply,
                                         DBUS_TYPE_STRING, &session->id,
                                         DBUS_TYPE_OBJECT_PATH, &p,
                                         DBUS_TYPE_STRING, &session->user->runtime_path,
                                         DBUS_TYPE_UNIX_FD, &fifo_fd,
+                                        DBUS_TYPE_STRING, &seat,
+                                        DBUS_TYPE_UINT32, &vtnr,
                                         DBUS_TYPE_INVALID);
                         free(p);
 
@@ -421,6 +426,9 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess
                         close_nointr_nofail(fifo_fd);
                         *_reply = reply;
 
+                        strv_free(controllers);
+                        strv_free(reset_controllers);
+
                         return 0;
                 }
 
@@ -965,8 +973,11 @@ static DBusHandlerResult manager_message_handler(
         } else if (dbus_message_is_method_call(message, "org.freedesktop.login1.Manager", "CreateSession")) {
 
                 r = bus_manager_create_session(m, message, &reply);
-                if (r == -ENOMEM)
-                        goto oom;
+
+                /* Don't delay the work on OOM here, since it might be
+                 * triggered by a low RLIMIT_NOFILE here (since we
+                 * send a dupped fd to the client), and we'd rather
+                 * see this fail quickly then be retried later */
 
                 if (r < 0)
                         return bus_send_error_reply(connection, message, &error, r);