diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-02-07 11:58:25 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-02-07 15:14:36 +0100 |
commit | 5ba6985b6c8ef85a8bcfeb1b65239c863436e75b (patch) | |
tree | d6e881b385efc01d14e13cb8555beb67cae7a61b /src/core/manager.h | |
parent | 8190da36f71a887945297cd65d6426c78b466a50 (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.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core/manager.h b/src/core/manager.h index 358aba7ff9..948ea98a45 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; |