diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-08-07 12:08:24 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-10-13 12:59:29 +0200 |
commit | 238794b15082e6f61d0ce2943d39205289fff7f0 (patch) | |
tree | 9acc1467b37fb149e2f8705ba572da8ce64c0189 /src/login/logind-core.c | |
parent | 9afe9efb9340588db553950727a2a9672dc3db24 (diff) | |
download | systemd-238794b15082e6f61d0ce2943d39205289fff7f0.tar.gz |
logind: add hashtable for finding session by leader PID
This is useful later on, when we quickly want to find the session for a
leader PID.
Diffstat (limited to 'src/login/logind-core.c')
-rw-r--r-- | src/login/logind-core.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/login/logind-core.c b/src/login/logind-core.c index c0d84c05fd..f97aa91430 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -339,13 +339,16 @@ int manager_get_session_by_pid(Manager *m, pid_t pid, Session **ret) { if (!pid_is_valid(pid)) return -EINVAL; - r = cg_pid_get_unit(pid, &unit); - if (r < 0) - goto not_found; + s = hashmap_get(m->sessions_by_leader, PID_TO_PTR(pid)); + if (!s) { + r = cg_pid_get_unit(pid, &unit); + if (r < 0) + goto not_found; - s = hashmap_get(m->session_units, unit); - if (!s) - goto not_found; + s = hashmap_get(m->session_units, unit); + if (!s) + goto not_found; + } if (ret) *ret = s; |