chiark / gitweb /
Move manager_dispatch_delayed() back to logind-dbus.c
authorSven Eden <yamakuzure@gmx.net>
Wed, 13 Jun 2018 06:08:10 +0000 (08:08 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 29 Jun 2018 05:12:51 +0000 (07:12 +0200)
src/login/elogind-dbus.c
src/login/elogind-dbus.h
src/login/logind-dbus.c

index b0772231403413d86b1e2b82600014a313d849f1..818c3676e748afaf69bea4553b11f5114934e8e5 100644 (file)
@@ -125,7 +125,7 @@ static int shutdown_or_sleep(Manager *m, HandleAction action) {
         }
 }
 
-static int execute_shutdown_or_sleep(
+int execute_shutdown_or_sleep(
                 Manager *m,
                 InhibitWhat w,
                 HandleAction action,
@@ -186,44 +186,6 @@ static int execute_shutdown_or_sleep(
         return 0;
 }
 
-int manager_dispatch_delayed(Manager *manager, bool timeout) {
-
-        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        Inhibitor *offending = NULL;
-        int r;
-
-        assert(manager);
-
-        if ( (0 == manager->action_what) || (HANDLE_IGNORE == manager->pending_action) )
-                return 0;
-
-        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);
-
-                log_notice("Delay lock is active (UID "UID_FMT"/%s, PID "PID_FMT"/%s) but inhibitor timeout is reached.",
-                           offending->uid, strna(u),
-                           offending->pid, strna(comm));
-        }
-
-        /* Actually do the operation */
-        r = execute_shutdown_or_sleep(manager, manager->action_what, manager->pending_action, &error);
-        if (r < 0) {
-                log_warning("Failed to send delayed message: %s", bus_error_message(&error, r));
-
-                manager->pending_action = HANDLE_IGNORE;
-                manager->action_what    = 0;
-                /* It is not a critical error for elogind if suspending fails */
-        }
-
-        return 1;
-}
-
 static int delay_shutdown_or_sleep(
                 Manager *m,
                 InhibitWhat w,
@@ -449,7 +411,7 @@ int manager_scheduled_shutdown_handler(
                  * above) for some seconds after our admin has seen the final
                  * wall message. */
 
-                bus_manager_log_shutdown(m, target);
+                bus_manager_log_shutdown(m, INHIBIT_SHUTDOWN, action);
                 log_info("Running in dry run, suppressing action.");
                 reset_scheduled_shutdown(m);
 
index 61620831696b74d793f1ad33cf3f8c6cf13b2662..deac06f7350d26924d164ed117e57c6fe1e17da1 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "logind.h"
 
+int execute_shutdown_or_sleep(Manager *m, InhibitWhat w,
+                              HandleAction action, sd_bus_error *error);
 int manager_scheduled_shutdown_handler(sd_event_source *s, uint64_t usec,
                                        void *userdata);
 int method_halt        (sd_bus_message *message, void *userdata, sd_bus_error *error);
@@ -34,13 +36,14 @@ int method_suspend     (sd_bus_message *message, void *userdata, sd_bus_error *e
 
 
 /* prototypes for former static functions in logind-dbus.c */
-int manager_inhibit_timeout_handler(sd_event_source *s, uint64_t usec, void *userdata);
-int send_prepare_for(Manager *m, InhibitWhat w, bool _active);
-int verify_shutdown_creds(Manager *m, sd_bus_message *message, InhibitWhat w,
-                          bool interactive, const char *action,
-                          const char *action_multiple_sessions,
-                          const char *action_ignore_inhibit,
-                          sd_bus_error *error);
+int  manager_inhibit_timeout_handler(sd_event_source *s, uint64_t usec, void *userdata);
+void reset_scheduled_shutdown(Manager *m);
+int  send_prepare_for(Manager *m, InhibitWhat w, bool _active);
+int  verify_shutdown_creds(Manager *m, sd_bus_message *message, InhibitWhat w,
+                           bool interactive, const char *action,
+                           const char *action_multiple_sessions,
+                           const char *action_ignore_inhibit,
+                           sd_bus_error *error);
 
 
 #endif // ELOGIND_SRC_LOGIN_ELOGIND_DBUS_H_INCLUDED
index 172536d084720d63c5abdcc4bb2dd2b2d0426b00..3ac67a4441a7d46a21bcb6a9b0467236bfb98613 100644 (file)
@@ -1635,6 +1635,7 @@ error:
 
         return r;
 }
+#endif // 0
 
 int manager_dispatch_delayed(Manager *manager, bool timeout) {
 
@@ -1644,7 +1645,11 @@ int manager_dispatch_delayed(Manager *manager, bool timeout) {
 
         assert(manager);
 
+#if 0 /// elogind has no action_job, but a pending_action
         if (manager->action_what == 0 || manager->action_job)
+#else
+        if ( (0 == manager->action_what) || (HANDLE_IGNORE == manager->pending_action) )
+#endif // 0
                 return 0;
 
         if (manager_is_inhibited(manager, manager->action_what, INHIBIT_DELAY, NULL, false, false, 0, &offending)) {
@@ -1662,19 +1667,29 @@ int manager_dispatch_delayed(Manager *manager, bool timeout) {
         }
 
         /* Actually do the operation */
+#if 0 /// elogind has no action_unit but a pending_action
         r = execute_shutdown_or_sleep(manager, manager->action_what, manager->action_unit, &error);
+#else
+        r = execute_shutdown_or_sleep(manager, manager->action_what, manager->pending_action, &error);
+#endif // 0
         if (r < 0) {
                 log_warning("Error during inhibitor-delayed operation (already returned success to client): %s",
                             bus_error_message(&error, r));
 
+
+#if 0 /// elogind has no action_unit but a pending_action
                 manager->action_unit = NULL;
                 manager->action_what = 0;
                 return r;
+#else
+                manager->pending_action = HANDLE_IGNORE;
+                manager->action_what    = 0;
+                /* It is not a critical error for elogind if suspending fails */
+#endif // 0
         }
 
         return 1;
 }
-#endif // 0
 
 #if 0 /// elogind-dbus.c needs to access this
 static int manager_inhibit_timeout_handler(
@@ -2043,7 +2058,11 @@ fail:
         return log_error_errno(r, "Failed to write information about scheduled shutdowns: %m");
 }
 
+#if 0 /// elogind must access this from elogind-dbus.c
 static void reset_scheduled_shutdown(Manager *m) {
+#else
+void reset_scheduled_shutdown(Manager *m) {
+#endif // 0
         assert(m);
 
         m->scheduled_shutdown_timeout_source = sd_event_source_unref(m->scheduled_shutdown_timeout_source);