From 5ba6985b6c8ef85a8bcfeb1b65239c863436e75b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 7 Feb 2014 11:58:25 +0100 Subject: 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. --- src/core/manager.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/core/manager.h') 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; -- cgit v1.2.3-54-g00ecf