chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Classify processes from sessions into cgroups
[elogind.git]
/
src
/
login
/
logind-user.c
diff --git
a/src/login/logind-user.c
b/src/login/logind-user.c
index 2733117c641977de41cf08f74e52a7d886eb2d2e..ccabe3d4771aeb15d03f8d2ba89ecfea6ba028b0 100644
(file)
--- a/
src/login/logind-user.c
+++ b/
src/login/logind-user.c
@@
-30,7
+30,7
@@
#include "hashmap.h"
#include "fileio.h"
#include "path-util.h"
#include "hashmap.h"
#include "fileio.h"
#include "path-util.h"
-#include "special.h"
+
//
#include "special.h"
#include "unit-name.h"
#include "bus-util.h"
#include "bus-error.h"
#include "unit-name.h"
#include "bus-util.h"
#include "bus-error.h"
@@
-409,26
+409,26
@@
static int user_start_slice(User *u) {
char lu[DECIMAL_STR_MAX(uid_t) + 1], *slice;
sprintf(lu, UID_FMT, u->uid);
char lu[DECIMAL_STR_MAX(uid_t) + 1], *slice;
sprintf(lu, UID_FMT, u->uid);
- r = slice_build_subslice(
SPECIAL_USER_SLICE
, lu, &slice);
+ r = slice_build_subslice(
"user"
, lu, &slice);
if (r < 0)
return r;
/// elogind : Do not try to use dbus to ask systemd
#if 0
r = manager_start_unit(u->manager, slice, &error, &job);
if (r < 0)
return r;
/// elogind : Do not try to use dbus to ask systemd
#if 0
r = manager_start_unit(u->manager, slice, &error, &job);
-#endif // 0
if (r < 0) {
log_error("Failed to start user slice: %s", bus_error_message(&error, r));
free(slice);
} else {
if (r < 0) {
log_error("Failed to start user slice: %s", bus_error_message(&error, r));
free(slice);
} else {
+#endif // 0
u->slice = slice;
/// elogind does not support slice jobs
#if 0
free(u->slice_job);
u->slice_job = job;
u->slice = slice;
/// elogind does not support slice jobs
#if 0
free(u->slice_job);
u->slice_job = job;
-#endif // 0
}
}
+#endif // 0
}
if (u->slice)
}
if (u->slice)
@@
-793,16
+793,27
@@
UserState user_get_state(User *u) {
}
int user_kill(User *u, int signo) {
}
int user_kill(User *u, int signo) {
+/// Without systemd unit support, elogind has to rely on its session system
+#if 0
assert(u);
assert(u);
-/// FIXME: Without direct cgroup support, elogind can not kill users
-#if 0
if (!u->slice)
return -ESRCH;
return manager_kill_unit(u->manager, u->slice, KILL_ALL, signo, NULL);
#else
if (!u->slice)
return -ESRCH;
return manager_kill_unit(u->manager, u->slice, KILL_ALL, signo, NULL);
#else
- return -ESRCH;
+ Session *s;
+ int res = 0;
+
+ assert(u);
+
+ LIST_FOREACH(sessions_by_user, s, u->sessions) {
+ int r = session_kill(s, KILL_ALL, signo);
+ if (res == 0 && r < 0)
+ res = r;
+ }
+
+ return res;
#endif // 0
}
#endif // 0
}