logind: at start-up automatically clean up orphaned inhibitors
This commit is contained in:
parent
290320effa
commit
11eae36d29
|
@ -13,6 +13,7 @@
|
|||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "format-util.h"
|
||||
#include "io-util.h"
|
||||
#include "logind-dbus.h"
|
||||
#include "logind-inhibit.h"
|
||||
#include "mkdir.h"
|
||||
|
@ -350,6 +351,24 @@ static void inhibitor_remove_fifo(Inhibitor *i) {
|
|||
}
|
||||
}
|
||||
|
||||
bool inhibitor_is_orphan(Inhibitor *i) {
|
||||
assert(i);
|
||||
|
||||
if (!i->started)
|
||||
return true;
|
||||
|
||||
if (!i->fifo_path)
|
||||
return true;
|
||||
|
||||
if (i->fifo_fd < 0)
|
||||
return true;
|
||||
|
||||
if (pipe_eof(i->fifo_fd) != 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
InhibitWhat manager_inhibit_what(Manager *m, InhibitMode mm) {
|
||||
Inhibitor *i;
|
||||
Iterator j;
|
||||
|
|
|
@ -60,6 +60,8 @@ void inhibitor_stop(Inhibitor *i);
|
|||
|
||||
int inhibitor_create_fifo(Inhibitor *i);
|
||||
|
||||
bool inhibitor_is_orphan(Inhibitor *i);
|
||||
|
||||
InhibitWhat manager_inhibit_what(Manager *m, InhibitMode mm);
|
||||
bool manager_is_inhibited(Manager *m, InhibitWhat w, InhibitMode mm, dual_timestamp *since, bool ignore_inactive, bool ignore_uid, uid_t uid, Inhibitor **offending);
|
||||
|
||||
|
|
|
@ -1145,8 +1145,15 @@ static int manager_startup(Manager *m) {
|
|||
HASHMAP_FOREACH(session, m->sessions, i)
|
||||
(void) session_start(session, NULL, NULL);
|
||||
|
||||
HASHMAP_FOREACH(inhibitor, m->inhibitors, i)
|
||||
inhibitor_start(inhibitor);
|
||||
HASHMAP_FOREACH(inhibitor, m->inhibitors, i) {
|
||||
(void) inhibitor_start(inhibitor);
|
||||
|
||||
/* Let's see if the inhibitor is dead now, then remove it */
|
||||
if (inhibitor_is_orphan(inhibitor)) {
|
||||
inhibitor_stop(inhibitor);
|
||||
inhibitor_free(inhibitor);
|
||||
}
|
||||
}
|
||||
|
||||
HASHMAP_FOREACH(button, m->buttons, i)
|
||||
button_check_switches(button);
|
||||
|
|
Loading…
Reference in a new issue