X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Flogin%2Flogind-dbus.c;h=cb67c668fa9982d262ab68ecf361017b8cc7bcab;hb=8966408042e1b5b941bc1d52688198c0d63c06f3;hp=3ad24b1fee20a31c0f8e44a62da9cda53eae991a;hpb=b4f4684f3a95c915491cd7845911ecdf2622b2c2;p=elogind.git diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 3ad24b1fe..cb67c668f 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -41,7 +41,7 @@ #include "path-util.h" #include "process-util.h" #include "selinux-util.h" -//#include "sleep-config.h" +#include "sleep-config.h" //#include "special.h" #include "strv.h" #include "terminal-util.h" @@ -50,9 +50,13 @@ #include "user-util.h" #include "utmp-wtmp.h" -/// Includes needed by elogind: +/// Additional includes needed by elogind #include "update-utmp.h" +#if 1 /// elogind needs this prototype +static int send_prepare_for(Manager *m, InhibitWhat w, bool _active); +#endif // 1 + int manager_get_session_from_creds(Manager *m, sd_bus_message *message, const char *name, sd_bus_error *error, Session **ret) { _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL; Session *session; @@ -918,7 +922,9 @@ static int method_release_session(sd_bus_message *message, void *userdata, sd_bu if (r < 0) return r; +#if 1 /// elogind must queue this session session_add_to_gc_queue(session); +#endif // 1 return sd_bus_reply_method_return(message, NULL); } @@ -1621,9 +1627,17 @@ static int execute_shutdown_or_sleep( /* no more pending actions, whether this failed or not */ m->pending_action = HANDLE_IGNORE; - m->action_what = 0; if (r < 0) return r; + + /* As elogind can not rely on a systemd manager to call all + * sleeping processes to wake up, we have to tell them all + * by ourselves. */ + if (w == INHIBIT_SLEEP) { + send_prepare_for(m, w, false); + m->action_what = 0; + } else + m->action_what = w; #endif // 0 /* Make sure the lid switch is ignored for a while */