X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind-dbus.c;h=723decd647346ec4b5fc5b76b7eddf15dcacd8c0;hb=61c0276130571598a970f314368866b219d7cddc;hp=b272401e5b5d886f00f8c38a11a53a23cd9d22fe;hpb=af750a80c7d0ae8259588f77e14e04cfce824081;p=elogind.git diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index b272401e5..723decd64 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -1468,18 +1468,13 @@ static int execute_shutdown_or_sleep( return 0; } -static int manager_inhibit_timeout_handler( - sd_event_source *s, - uint64_t usec, - void *userdata) { +int manager_dispatch_delayed(Manager *manager, bool timeout) { _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL; Inhibitor *offending = NULL; - Manager *manager = userdata; int r; assert(manager); - assert(manager->inhibit_timeout_source == s); if (manager->action_what == 0 || manager->action_job) return 0; @@ -1487,6 +1482,9 @@ static int manager_inhibit_timeout_handler( if (manager_is_inhibited(manager, manager->action_what, INHIBIT_DELAY, NULL, false, false, 0, &offending)) { _cleanup_free_ char *comm = NULL, *u = NULL; + if (!timeout) + return 0; + (void) get_process_comm(offending->pid, &comm); u = uid_to_name(offending->uid); @@ -1502,9 +1500,25 @@ static int manager_inhibit_timeout_handler( manager->action_unit = NULL; manager->action_what = 0; + return r; } - return 0; + return 1; +} + +static int manager_inhibit_timeout_handler( + sd_event_source *s, + uint64_t usec, + void *userdata) { + + Manager *manager = userdata; + int r; + + assert(manager); + assert(manager->inhibit_timeout_source == s); + + r = manager_dispatch_delayed(manager, true); + return (r < 0) ? r : 0; } static int delay_shutdown_or_sleep(