summaryrefslogtreecommitdiff
path: root/src/login/logind-core.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-08-07 12:08:24 +0200
committerLennart Poettering <lennart@poettering.net>2018-10-13 12:59:29 +0200
commit238794b15082e6f61d0ce2943d39205289fff7f0 (patch)
tree9acc1467b37fb149e2f8705ba572da8ce64c0189 /src/login/logind-core.c
parent9afe9efb9340588db553950727a2a9672dc3db24 (diff)
downloadsystemd-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.c15
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;