summaryrefslogtreecommitdiff
path: root/src/core/manager.h
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2014-02-07 11:58:25 +0100
committerLennart Poettering <lennart@poettering.net>2014-02-07 15:14:36 +0100
commit5ba6985b6c8ef85a8bcfeb1b65239c863436e75b (patch)
treed6e881b385efc01d14e13cb8555beb67cae7a61b /src/core/manager.h
parent8190da36f71a887945297cd65d6426c78b466a50 (diff)
core: allow PIDs to be watched by two units at the same time
In some cases it is interesting to map a PID to two units at the same time. For example, when a user logs in via a getty, which is reexeced to /sbin/login that binary will be explicitly referenced as main pid of the getty service, as well as implicitly referenced as part of the session scope.
Diffstat (limited to 'src/core/manager.h')
-rw-r--r--src/core/manager.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core/manager.h b/src/core/manager.h
index 358aba7ff..948ea98a4 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -96,7 +96,14 @@ struct Manager {
sd_event *event;
- Hashmap *watch_pids; /* pid => Unit object n:1 */
+ /* We use two hash tables here, since the same PID might be
+ * watched by two different units: once the unit that forked
+ * it off, and possibly a different unit to which it was
+ * joined as cgroup member. Since we know that it is either
+ * one or two units for each PID we just use to hashmaps
+ * here. */
+ Hashmap *watch_pids1; /* pid => Unit object n:1 */
+ Hashmap *watch_pids2; /* pid => Unit object n:1 */
sd_event_source *run_queue_event_source;