diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-01-17 14:02:09 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-01-18 13:56:02 +0100 |
commit | abc5bbc6f0ac1edeebec251c4fb3583a4222fb08 (patch) | |
tree | 7755a035d5ae8d1520b0b61a789d934054118633 /src/login/logind-seat.c | |
parent | 87a8baa35d6d65ac3b58ae8e26e338e67f8ae8ed (diff) |
logind: allow to create multiple sessions on non-multi-session seats to deal with left-over sessions
Diffstat (limited to 'src/login/logind-seat.c')
-rw-r--r-- | src/login/logind-seat.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c index 8c83a2c5ec..be37c1cc2e 100644 --- a/src/login/logind-seat.c +++ b/src/login/logind-seat.c @@ -390,18 +390,19 @@ int seat_attach_session(Seat *s, Session *session) { assert(session); assert(!session->seat); - if (!seat_can_multi_session(s) && s->sessions) - return -EEXIST; - session->seat = s; LIST_PREPEND(Session, sessions_by_seat, s->sessions, session); seat_send_changed(s, "Sessions\0"); - if (!seat_can_multi_session(s)) { - assert(!s->active); + /* Note that even if a seat is not multi-session capable it + * still might have multiple sessions on it since old, dead + * sessions might continue to be tracked until all their + * processes are gone. The most recently added session + * (i.e. the first in s->sessions) is the one that matters. */ + + if (!seat_can_multi_session(s)) seat_set_active(s, session); - } return 0; } |