chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
logind: release VT-positions when closing sessions
[elogind.git]
/
src
/
login
/
logind-session.c
diff --git
a/src/login/logind-session.c
b/src/login/logind-session.c
index d9167197e0859286cb9b5eaa47f863bd1c5cb650..30380ae52f9426f69154da98cd40787f3112676f 100644
(file)
--- a/
src/login/logind-session.c
+++ b/
src/login/logind-session.c
@@
-37,6
+37,8
@@
#include "bus-util.h"
#include "bus-error.h"
#include "logind-session.h"
#include "bus-util.h"
#include "bus-error.h"
#include "logind-session.h"
+#include "formats-util.h"
+#include "terminal-util.h"
#define RELEASE_USEC (20*USEC_PER_SEC)
#define RELEASE_USEC (20*USEC_PER_SEC)
@@
-262,7
+264,7
@@
int session_save(Session *s) {
fprintf(f, "VTNR=%u\n", s->vtnr);
if (!s->vtnr)
fprintf(f, "VTNR=%u\n", s->vtnr);
if (!s->vtnr)
- fprintf(f, "POS
=%u\n", s->pos
);
+ fprintf(f, "POS
ITION=%u\n", s->position
);
if (s->leader > 0)
fprintf(f, "LEADER="PID_FMT"\n", s->leader);
if (s->leader > 0)
fprintf(f, "LEADER="PID_FMT"\n", s->leader);
@@
-300,7
+302,7
@@
int session_load(Session *s) {
*seat = NULL,
*vtnr = NULL,
*state = NULL,
*seat = NULL,
*vtnr = NULL,
*state = NULL,
- *pos = NULL,
+ *pos
ition
= NULL,
*leader = NULL,
*type = NULL,
*class = NULL,
*leader = NULL,
*type = NULL,
*class = NULL,
@@
-327,7
+329,7
@@
int session_load(Session *s) {
"DESKTOP", &s->desktop,
"VTNR", &vtnr,
"STATE", &state,
"DESKTOP", &s->desktop,
"VTNR", &vtnr,
"STATE", &state,
- "POS
", &pos
,
+ "POS
ITION", &position
,
"LEADER", &leader,
"TYPE", &type,
"CLASS", &class,
"LEADER", &leader,
"TYPE", &type,
"CLASS", &class,
@@
-386,10
+388,10
@@
int session_load(Session *s) {
if (!s->seat || !seat_has_vts(s->seat))
s->vtnr = 0;
if (!s->seat || !seat_has_vts(s->seat))
s->vtnr = 0;
- if (pos && s->seat) {
+ if (pos
ition
&& s->seat) {
unsigned int npos;
unsigned int npos;
- safe_atou(pos, &npos);
+ safe_atou(pos
ition
, &npos);
seat_claim_position(s->seat, s, npos);
}
seat_claim_position(s->seat, s, npos);
}
@@
-628,6
+630,9
@@
int session_stop(Session *s, bool force) {
s->timer_event_source = sd_event_source_unref(s->timer_event_source);
s->timer_event_source = sd_event_source_unref(s->timer_event_source);
+ if (s->seat)
+ seat_evict_position(s->seat, s);
+
/* We are going down, don't care about FIFOs anymore */
session_remove_fifo(s);
/* We are going down, don't care about FIFOs anymore */
session_remove_fifo(s);
@@
-664,6
+669,9
@@
int session_finalize(Session *s) {
s->timer_event_source = sd_event_source_unref(s->timer_event_source);
s->timer_event_source = sd_event_source_unref(s->timer_event_source);
+ if (s->seat)
+ seat_evict_position(s->seat, s);
+
/* Kill session devices */
while ((sd = hashmap_first(s->devices)))
session_device_free(sd);
/* Kill session devices */
while ((sd = hashmap_first(s->devices)))
session_device_free(sd);