X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind-inhibit.c;h=78afee3139e13dcd76645f44adae74dbddae4bdb;hb=c7b5eb98e8eeafe63a079ee3c51e9670872437ae;hp=2f7a758e7cf2bba48efe87b6b500eee00f84b483;hpb=f8e2fb7b14e53f5a4bcfd66d26910af1dee185c6;p=elogind.git diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c index 2f7a758e7..78afee313 100644 --- a/src/login/logind-inhibit.c +++ b/src/login/logind-inhibit.c @@ -150,6 +150,8 @@ int inhibitor_start(Inhibitor *i) { if (i->started) return 0; + dual_timestamp_get(&i->since); + log_debug("Inhibitor %s (%s) pid=%lu uid=%lu started.", strna(i->who), strna(i->why), (unsigned long) i->pid, (unsigned long) i->uid); @@ -325,6 +327,32 @@ InhibitWhat manager_inhibit_what(Manager *m) { return what; } +bool manager_is_inhibited(Manager *m, InhibitWhat w, dual_timestamp *since) { + Inhibitor *i; + Iterator j; + struct dual_timestamp ts = { 0, 0 }; + bool inhibited = false; + + assert(m); + assert(w > 0 && w < _INHIBIT_WHAT_MAX); + + HASHMAP_FOREACH(i, m->inhibitor_fds, j) { + if (!(i->what & w)) + continue; + + if (!inhibited || + i->since.monotonic < ts.monotonic) + ts = i->since; + + inhibited = true; + } + + if (since) + *since = ts; + + return inhibited; +} + const char *inhibit_what_to_string(InhibitWhat w) { static const char* const table[_INHIBIT_WHAT_MAX] = {