diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-07-23 10:27:19 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2019-07-23 16:08:06 +0200 |
commit | 81280b2a6fbad079b5d72f48160bf1d492cc8e57 (patch) | |
tree | 9ab6cdef248d27766a399f4e9c38bb1312e38399 /src/login/logind-core.c | |
parent | 09f300c4d0dbeb0aae98d30eb2214d4f425527e9 (diff) | |
download | systemd-81280b2a6fbad079b5d72f48160bf1d492cc8e57.tar.gz |
logind: rework allocation/freeing of inhibitors
Let's follow our modern style (i.e. return proper errors, use structure
initialization and _cleanup_).
Most importantly: remove state file and FIFO removal from
inhibitor_free() and let's move it to inhibitor_stop().
This makes sure that state files/FIFOs are not removed when the we
terminate logind, i.e. that they can survive logind restarts.
Fixes: #11825
Diffstat (limited to 'src/login/logind-core.c')
-rw-r--r-- | src/login/logind-core.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/login/logind-core.c b/src/login/logind-core.c index f631ba7219..1d21e90a2e 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -197,26 +197,22 @@ int manager_add_user_by_uid(Manager *m, uid_t uid, User **_user) { return manager_add_user(m, uid, p->pw_gid, p->pw_name, p->pw_dir, _user); } -int manager_add_inhibitor(Manager *m, const char* id, Inhibitor **_inhibitor) { +int manager_add_inhibitor(Manager *m, const char* id, Inhibitor **ret) { Inhibitor *i; + int r; assert(m); assert(id); i = hashmap_get(m->inhibitors, id); - if (i) { - if (_inhibitor) - *_inhibitor = i; - - return 0; + if (!i) { + r = inhibitor_new(&i, m, id); + if (r < 0) + return r; } - i = inhibitor_new(m, id); - if (!i) - return -ENOMEM; - - if (_inhibitor) - *_inhibitor = i; + if (ret) + *ret = i; return 0; } |