chiark / gitweb /
logind: check whether newly created session is active
[elogind.git] / src / logind-session.c
index e71ff4f14e9aaca2ca5965653e4912ca4d8cb2ad..8e35e09069c4b503035375238d2eee4ae2dca04d 100644 (file)
@@ -111,6 +111,9 @@ int session_save(Session *s) {
 
         assert(s);
 
+        if (!s->started)
+                return 0;
+
         r = safe_mkdir("/run/systemd/sessions", 0755, 0, 0);
         if (r < 0)
                 goto finish;
@@ -325,14 +328,6 @@ int session_activate(Session *s) {
         return seat_apply_acls(s->seat, old_active);
 }
 
-bool x11_display_is_local(const char *display) {
-        assert(display);
-
-        return
-                display[0] == ':' &&
-                display[1] >= '0' &&
-                display[1] <= '9';
-}
 
 static int session_link_x11_socket(Session *s) {
         char *t, *f, *c;
@@ -345,7 +340,7 @@ static int session_link_x11_socket(Session *s) {
         if (s->user->display)
                 return 0;
 
-        if (!s->display || !x11_display_is_local(s->display))
+        if (!s->display || !display_is_local(s->display))
                 return 0;
 
         k = strspn(s->display+1, "0123456789");
@@ -413,9 +408,11 @@ static int session_create_one_group(Session *s, const char *controller, const ch
         assert(controller);
         assert(path);
 
-        if (s->leader > 0)
+        if (s->leader > 0) {
                 r = cg_create_and_attach(controller, path, s->leader);
-        else
+                if (r < 0)
+                        r = cg_create(controller, path);
+        } else
                 r = cg_create(controller, path);
 
         if (r < 0)
@@ -447,9 +444,9 @@ static int session_create_cgroup(Session *s) {
 
         r = session_create_one_group(s, SYSTEMD_CGROUP_CONTROLLER, p);
         if (r < 0) {
+                log_error("Failed to create "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r));
                 free(p);
                 s->cgroup_path = NULL;
-                log_error("Failed to create "SYSTEMD_CGROUP_CONTROLLER":%s: %s", p, strerror(-r));
                 return r;
         }
 
@@ -514,13 +511,16 @@ int session_start(Session *s) {
         /* Create X11 symlink */
         session_link_x11_socket(s);
 
-        /* Save session data */
-        session_save(s);
-
         dual_timestamp_get(&s->timestamp);
 
+        if (s->seat)
+                seat_read_active_vt(s->seat);
+
         s->started = true;
 
+        /* Save session data */
+        session_save(s);
+
         session_send_signal(s, true);
 
         if (s->seat) {