|
Zbigniew Jędrzejewski-Szmek |
47c564 |
From aa6c8bcd17b37634fc7e4d5d59b6b9d93625b4a3 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
From: David Herrmann <dh.herrmann@gmail.com>
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
Date: Tue, 25 Feb 2014 13:08:24 +0100
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
Subject: [PATCH] login: set pos-slot to fallback on pos-eviction
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
If we evict a session position, we open the position slot for future
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
sessions. However, there might already be another session on the same
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
position if both were started on the same VT. This is currently done if
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
gdm spawns the session on its own Xserver.
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
Hence, look for such a session on pos-eviction and claim the new slot
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
immediately.
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
(cherry picked from commit 3e6b205f81e743c7354ccbc69eb45afbdbebe2dc)
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
src/login/logind-seat.c | 14 +++++++++++++-
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
index 36ec7ed..96cf08e 100644
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
--- a/src/login/logind-seat.c
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+++ b/src/login/logind-seat.c
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
@@ -459,6 +459,7 @@ int seat_stop_sessions(Seat *s, bool force) {
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
void seat_evict_position(Seat *s, Session *session) {
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ Session *iter;
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
unsigned int pos = session->pos;
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
session->pos = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
@@ -466,8 +467,19 @@ void seat_evict_position(Seat *s, Session *session) {
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
if (!pos)
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
return;
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
- if (pos < s->position_count && s->positions[pos] == session)
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ if (pos < s->position_count && s->positions[pos] == session) {
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
s->positions[pos] = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ /* There might be another session claiming the same
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ * position (eg., during gdm->session transition), so lets look
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ * for it and set it on the free slot. */
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ LIST_FOREACH(sessions_by_seat, iter, s->sessions) {
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ if (iter->pos == pos) {
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ s->positions[pos] = iter;
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ break;
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
|
|
Zbigniew Jędrzejewski-Szmek |
47c564 |
void seat_claim_position(Seat *s, Session *session, unsigned int pos) {
|