]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pid1: add a manager_trigger_run_queue() helper
authorLennart Poettering <lennart@poettering.net>
Fri, 12 Nov 2021 08:43:07 +0000 (09:43 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 12 Nov 2021 14:52:37 +0000 (15:52 +0100)
We have two different places where we re-trigger the run queue now.
let's unify it under a common function, that is part of the Manager
code.

Follow-up for #20953

src/core/job.c
src/core/manager.c
src/core/manager.h
src/core/mount.c

index 6dd01a6f49d1feb48d8ca96942ef0e7699cf5547..b7ac75ac71f306ab58060af551ce424470c479fb 100644 (file)
@@ -1107,17 +1107,13 @@ void job_add_to_run_queue(Job *j) {
         if (j->in_run_queue)
                 return;
 
-        if (prioq_isempty(j->manager->run_queue)) {
-                r = sd_event_source_set_enabled(j->manager->run_queue_event_source, SD_EVENT_ONESHOT);
-                if (r < 0)
-                        log_warning_errno(r, "Failed to enable job run queue event source, ignoring: %m");
-        }
-
         r = prioq_put(j->manager->run_queue, j, &j->run_queue_idx);
         if (r < 0)
                 log_warning_errno(r, "Failed put job in run queue, ignoring: %m");
         else
                 j->in_run_queue = true;
+
+        manager_trigger_run_queue(j->manager);
 }
 
 void job_add_to_dbus_queue(Job *j) {
index 61895ab09281e253eaa1099a55b6f453b8ece308..b21747daeae92c412c6376155c763dbf2cf2dd3b 100644 (file)
@@ -2248,6 +2248,18 @@ static int manager_dispatch_run_queue(sd_event_source *source, void *userdata) {
         return 1;
 }
 
+void manager_trigger_run_queue(Manager *m) {
+        int r;
+
+        assert(m);
+
+        r = sd_event_source_set_enabled(
+                        m->run_queue_event_source,
+                        prioq_isempty(m->run_queue) ? SD_EVENT_OFF : SD_EVENT_ONESHOT);
+        if (r < 0)
+                log_warning_errno(r, "Failed to enable job run queue event source, ignoring: %m");
+}
+
 static unsigned manager_dispatch_dbus_queue(Manager *m) {
         unsigned n = 0, budget;
         Unit *u;
index 29ce812121208936cb44146403aaed6ccc4501f3..c9230cb5c41b123c2f39f649f8da21d101b790b1 100644 (file)
@@ -507,6 +507,8 @@ int manager_get_effective_environment(Manager *m, char ***ret);
 
 int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
 
+void manager_trigger_run_queue(Manager *m);
+
 int manager_loop(Manager *m);
 
 int manager_reload(Manager *m);
index 3463641c6cae0628f73f05b09575e1083ac41c09..4f76b552c22f30595ef4ea554fd989a17fb9d967 100644 (file)
@@ -1840,15 +1840,12 @@ static bool mount_is_mounted(Mount *m) {
 
 static int mount_on_ratelimit_expire(sd_event_source *s, void *userdata) {
         Manager *m = userdata;
-        int r;
 
         assert(m);
 
-        /* By entering ratelimited state we made all mount start jobs not runnable, now rate limit is over so let's
-         * make sure we dispatch them in the next iteration. */
-        r = sd_event_source_set_enabled(m->run_queue_event_source, SD_EVENT_ONESHOT);
-        if (r < 0)
-                log_debug_errno(r, "Failed to enable run queue event source, ignoring: %m");
+        /* By entering ratelimited state we made all mount start jobs not runnable, now rate limit is over so
+         * let's make sure we dispatch them in the next iteration. */
+        manager_trigger_run_queue(m);
 
         return 0;
 }