mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
pid1: add a manager_trigger_run_queue() helper
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
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user