chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
systemctl: fix --help syntax for variables
[elogind.git]
/
src
/
logind.c
diff --git
a/src/logind.c
b/src/logind.c
index d7d04a2c53ddfa07e435da0fd2b2e62c0bf7b5a0..f96ace2315734b4dcd99b14a2d8c6f015cc369e6 100644
(file)
--- a/
src/logind.c
+++ b/
src/logind.c
@@
-286,7
+286,7
@@
int manager_process_seat_device(Manager *m, struct udev_device *d) {
Seat *seat;
sn = udev_device_get_property_value(d, "ID_SEAT");
Seat *seat;
sn = udev_device_get_property_value(d, "ID_SEAT");
- if (
!sn
)
+ if (
isempty(sn)
)
sn = "seat0";
if (!seat_name_is_valid(sn)) {
sn = "seat0";
if (!seat_name_is_valid(sn)) {
@@
-451,7
+451,6
@@
static int manager_enumerate_users_from_cgroup(Manager *m) {
return r;
}
return r;
}
-
static int manager_enumerate_linger_users(Manager *m) {
DIR *d;
struct dirent *de;
static int manager_enumerate_linger_users(Manager *m) {
DIR *d;
struct dirent *de;
@@
-564,6
+563,9
@@
static int manager_enumerate_sessions_from_cgroup(Manager *m) {
while ((k = cg_read_subgroup(d, &name)) > 0) {
Session *session;
while ((k = cg_read_subgroup(d, &name)) > 0) {
Session *session;
+ if (streq(name, "shared"))
+ continue;
+
k = manager_add_session(m, u, name, &session);
if (k < 0) {
free(name);
k = manager_add_session(m, u, name, &session);
if (k < 0) {
free(name);
@@
-975,7
+977,7
@@
static int manager_connect_udev(Manager *m) {
return 0;
}
return 0;
}
-void manager_gc(Manager *m) {
+void manager_gc(Manager *m
, bool drop_not_started
) {
Seat *seat;
Session *session;
User *user;
Seat *seat;
Session *session;
User *user;
@@
-986,7
+988,7
@@
void manager_gc(Manager *m) {
LIST_REMOVE(Seat, gc_queue, m->seat_gc_queue, seat);
seat->in_gc_queue = false;
LIST_REMOVE(Seat, gc_queue, m->seat_gc_queue, seat);
seat->in_gc_queue = false;
- if (seat_check_gc(seat) == 0) {
+ if (seat_check_gc(seat
, drop_not_started
) == 0) {
seat_stop(seat);
seat_free(seat);
}
seat_stop(seat);
seat_free(seat);
}
@@
-996,7
+998,7
@@
void manager_gc(Manager *m) {
LIST_REMOVE(Session, gc_queue, m->session_gc_queue, session);
session->in_gc_queue = false;
LIST_REMOVE(Session, gc_queue, m->session_gc_queue, session);
session->in_gc_queue = false;
- if (session_check_gc(session) == 0) {
+ if (session_check_gc(session
, drop_not_started
) == 0) {
session_stop(session);
session_free(session);
}
session_stop(session);
session_free(session);
}
@@
-1006,7
+1008,7
@@
void manager_gc(Manager *m) {
LIST_REMOVE(User, gc_queue, m->user_gc_queue, user);
user->in_gc_queue = false;
LIST_REMOVE(User, gc_queue, m->user_gc_queue, user);
user->in_gc_queue = false;
- if (user_check_gc(user) == 0) {
+ if (user_check_gc(user
, drop_not_started
) == 0) {
user_stop(user);
user_free(user);
}
user_stop(user);
user_free(user);
}
@@
-1090,6
+1092,9
@@
int manager_startup(Manager *m) {
manager_enumerate_users(m);
manager_enumerate_sessions(m);
manager_enumerate_users(m);
manager_enumerate_sessions(m);
+ /* Remove stale objects before we start them */
+ manager_gc(m, false);
+
/* And start everything */
HASHMAP_FOREACH(seat, m->seats, i)
seat_start(seat);
/* And start everything */
HASHMAP_FOREACH(seat, m->seats, i)
seat_start(seat);
@@
-1110,12
+1115,12
@@
int manager_run(Manager *m) {
struct epoll_event event;
int n;
struct epoll_event event;
int n;
- manager_gc(m);
+ manager_gc(m
, true
);
if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE)
continue;
if (dbus_connection_dispatch(m->bus) != DBUS_DISPATCH_COMPLETE)
continue;
- manager_gc(m);
+ manager_gc(m
, true
);
n = epoll_wait(m->epoll_fd, &event, 1, -1);
if (n < 0) {
n = epoll_wait(m->epoll_fd, &event, 1, -1);
if (n < 0) {