Hello, I have here a request that systemd should not refuse to start service because of "start request repeated too quickly" when service is started manually. I have prepared a patch, but I am not sure about my approach.
Regards Lukas
>From b8e14cc91aea183aa21dc9173a44618b70dca190 Mon Sep 17 00:00:00 2001 From: Lukas Nykryn <lnyk...@redhat.com> Date: Fri, 17 Aug 2012 14:44:31 +0200 Subject: [PATCH] core: don't check ratelimit on manual start --- src/core/automount.c | 2 +- src/core/dbus-manager.c | 2 +- src/core/dbus-unit.c | 2 +- src/core/dbus.c | 2 +- src/core/job.h | 1 + src/core/main.c | 2 +- src/core/manager.c | 6 +++--- src/core/manager.h | 2 +- src/core/path.c | 2 +- src/core/service.c | 4 ++-- src/core/socket.c | 4 ++-- src/core/timer.c | 2 +- src/core/transaction.c | 33 +++++++++++++++++---------------- src/core/transaction.h | 4 ++-- src/core/unit.c | 22 +++++++++++----------- src/test/test-engine.c | 20 ++++++++++---------- 16 files changed, 56 insertions(+), 54 deletions(-) diff --git a/src/core/automount.c b/src/core/automount.c index c4a7528..e9696bd 100644 --- a/src/core/automount.c +++ b/src/core/automount.c @@ -598,7 +598,7 @@ static void automount_enter_runnning(Automount *a) { if (!S_ISDIR(st.st_mode) || st.st_dev != a->dev_id) log_info("%s's automount point already active?", UNIT(a)->id); - else if ((r = manager_add_job(UNIT(a)->manager, JOB_START, UNIT_DEREF(a->mount), JOB_REPLACE, true, &error, NULL)) < 0) { + else if ((r = manager_add_job(UNIT(a)->manager, JOB_START, UNIT_DEREF(a->mount), JOB_REPLACE, true, false, &error, NULL)) < 0) { log_warning("%s failed to queue mount startup job: %s", UNIT(a)->id, bus_error(&error, r)); goto fail; } diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index c341d36..a389142 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -1562,7 +1562,7 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, return bus_send_error_reply(connection, message, &error, -EPERM); } - if ((r = manager_add_job(m, job_type, u, mode, true, &error, &j)) < 0) + if ((r = manager_add_job(m, job_type, u, mode, true, true, &error, &j)) < 0) return bus_send_error_reply(connection, message, &error, r); cl = job_bus_client_new(connection, message_get_sender_with_fallback(message)); diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c index ad817d7..d1a548a 100644 --- a/src/core/dbus-unit.c +++ b/src/core/dbus-unit.c @@ -508,7 +508,7 @@ static DBusHandlerResult bus_unit_message_dispatch(Unit *u, DBusConnection *conn return bus_send_error_reply(connection, message, &error, -EINVAL); } - if ((r = manager_add_job(m, job_type, u, mode, true, &error, &j)) < 0) + if ((r = manager_add_job(m, job_type, u, mode, true, false, &error, &j)) < 0) return bus_send_error_reply(connection, message, &error, r); if (!(reply = dbus_message_new_method_return(message))) diff --git a/src/core/dbus.c b/src/core/dbus.c index 9db172b..3bb90f0 100644 --- a/src/core/dbus.c +++ b/src/core/dbus.c @@ -375,7 +375,7 @@ static DBusHandlerResult api_bus_message_filter(DBusConnection *connection, DBus r = -EPERM; if (r >= 0) - r = manager_add_job(m, JOB_START, u, JOB_REPLACE, true, &error, NULL); + r = manager_add_job(m, JOB_START, u, JOB_REPLACE, true, false, &error, NULL); } if (r < 0) { diff --git a/src/core/job.h b/src/core/job.h index 349fb68..b16e4f1 100644 --- a/src/core/job.h +++ b/src/core/job.h @@ -161,6 +161,7 @@ struct Job { bool sent_dbus_new_signal:1; bool ignore_order:1; bool forgot_bus_clients:1; + bool user_start:1; }; JobBusClient* job_bus_client_new(DBusConnection *connection, const char *name); diff --git a/src/core/main.c b/src/core/main.c index cdd77c1..151bc17 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1601,7 +1601,7 @@ int main(int argc, char *argv[]) { manager_dump_units(m, stdout, "\t"); } - r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, &error, &default_unit_job); + r = manager_add_job(m, JOB_START, target, JOB_REPLACE, false, false, &error, &default_unit_job); if (r < 0) { log_error("Failed to start default target: %s", bus_error(&error, r)); dbus_error_free(&error); diff --git a/src/core/manager.c b/src/core/manager.c index bcaf913..ca2817a 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -664,7 +664,7 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) { return r; } -int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool override, DBusError *e, Job **_ret) { +int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool override, bool user_start, DBusError *e, Job **_ret) { int r; Transaction *tr; @@ -691,7 +691,7 @@ int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool ove if (!tr) return -ENOMEM; - r = transaction_add_job_and_dependencies(tr, type, unit, NULL, true, override, false, + r = transaction_add_job_and_dependencies(tr, type, unit, NULL, true, override, user_start, false, mode == JOB_IGNORE_DEPENDENCIES || mode == JOB_IGNORE_REQUIREMENTS, mode == JOB_IGNORE_DEPENDENCIES, e); if (r < 0) @@ -733,7 +733,7 @@ int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode if ((r = manager_load_unit(m, name, NULL, NULL, &unit)) < 0) return r; - return manager_add_job(m, type, unit, mode, override, e, _ret); + return manager_add_job(m, type, unit, mode, override, false, e, _ret); } Job *manager_get_job(Manager *m, uint32_t id) { diff --git a/src/core/manager.h b/src/core/manager.h index 603c2dc..b99e560 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -255,7 +255,7 @@ int manager_load_unit_prepare(Manager *m, const char *name, const char *path, DB int manager_load_unit(Manager *m, const char *name, const char *path, DBusError *e, Unit **_ret); int manager_load_unit_from_dbus_path(Manager *m, const char *s, DBusError *e, Unit **_u); -int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool force, DBusError *e, Job **_ret); +int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool force, bool user_start, DBusError *e, Job **_ret); int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, bool force, DBusError *e, Job **_ret); void manager_dump_units(Manager *s, FILE *f, const char *prefix); diff --git a/src/core/path.c b/src/core/path.c index 42dd5da..c28db53 100644 --- a/src/core/path.c +++ b/src/core/path.c @@ -467,7 +467,7 @@ static void path_enter_running(Path *p) { if (UNIT(p)->job && UNIT(p)->job->type == JOB_STOP) return; - if ((r = manager_add_job(UNIT(p)->manager, JOB_START, UNIT_DEREF(p->unit), JOB_REPLACE, true, &error, NULL)) < 0) + if ((r = manager_add_job(UNIT(p)->manager, JOB_START, UNIT_DEREF(p->unit), JOB_REPLACE, true, false, &error, NULL)) < 0) goto fail; p->inotify_triggered = false; diff --git a/src/core/service.c b/src/core/service.c index f540752..ae821c1 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -2293,7 +2293,7 @@ static void service_enter_restart(Service *s) { * restarted. We use JOB_RESTART (instead of the more obvious * JOB_START) here so that those dependency jobs will be added * as well. */ - r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL); + r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, false, &error, NULL); if (r < 0) goto fail; @@ -2427,7 +2427,7 @@ fail: static int service_start_limit_test(Service *s) { assert(s); - if (ratelimit_test(&s->start_limit)) + if (ratelimit_test(&s->start_limit) || (s->meta.job && s->meta.job->user_start)) return 0; switch (s->start_limit_action) { diff --git a/src/core/socket.c b/src/core/socket.c index cbbfb0c..5a7bb19 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -1426,7 +1426,7 @@ static void socket_enter_running(Socket *s, int cfd) { } if (!pending) { - r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, &error, NULL); + r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, false, &error, NULL); if (r < 0) goto fail; } @@ -1495,7 +1495,7 @@ static void socket_enter_running(Socket *s, int cfd) { cfd = -1; s->n_connections ++; - r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(service), JOB_REPLACE, true, &error, NULL); + r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT(service), JOB_REPLACE, true, false, &error, NULL); if (r < 0) goto fail; diff --git a/src/core/timer.c b/src/core/timer.c index 0b3c5ce..4792aac 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -289,7 +289,7 @@ static void timer_enter_running(Timer *t) { if (UNIT(t)->job && UNIT(t)->job->type == JOB_STOP) return; - if ((r = manager_add_job(UNIT(t)->manager, JOB_START, UNIT_DEREF(t->unit), JOB_REPLACE, true, &error, NULL)) < 0) + if ((r = manager_add_job(UNIT(t)->manager, JOB_START, UNIT_DEREF(t->unit), JOB_REPLACE, true, false, &error, NULL)) < 0) goto fail; timer_set_state(t, TIMER_RUNNING); diff --git a/src/core/transaction.c b/src/core/transaction.c index 1f8d803..979c481 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -790,13 +790,13 @@ static void transaction_unlink_job(Transaction *tr, Job *j, bool delete_dependen } } -int transaction_add_job_and_dependencies( - Transaction *tr, +int transaction_add_job_and_dependencies(Transaction *tr, JobType type, Unit *unit, Job *by, bool matters, bool override, + bool user_start, bool conflicts, bool ignore_requirements, bool ignore_order, @@ -850,6 +850,7 @@ int transaction_add_job_and_dependencies( return -ENOMEM; ret->ignore_order = ret->ignore_order || ignore_order; + ret->user_start = ret->user_start || user_start; /* Then, add a link to the job. */ if (by) { @@ -868,7 +869,7 @@ int transaction_add_job_and_dependencies( * add all dependencies of everybody following. */ if (unit_following_set(ret->unit, &following) > 0) { SET_FOREACH(dep, following, i) { - r = transaction_add_job_and_dependencies(tr, type, dep, ret, false, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, type, dep, ret, false, override, false, false, false, ignore_order, e); if (r < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->id, bus_error(e, r)); @@ -883,7 +884,7 @@ int transaction_add_job_and_dependencies( /* Finally, recursively add in all dependencies. */ if (type == JOB_START || type == JOB_RESTART) { SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUIRES], i) { - r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, override, false, false, false, ignore_order, e); if (r < 0) { if (r != -EBADR) goto fail; @@ -894,7 +895,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_BINDS_TO], i) { - r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, true, override, false, false, false, ignore_order, e); if (r < 0) { if (r != -EBADR) goto fail; @@ -905,7 +906,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUIRES_OVERRIDABLE], i) { - r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, !override, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, !override, override, false, false, false, ignore_order, e); if (r < 0) { log_full(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, "Cannot add dependency job for unit %s, ignoring: %s", dep->id, bus_error(e, r)); @@ -916,7 +917,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_WANTS], i) { - r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, false, false, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_START, dep, ret, false, false, false, false, false, ignore_order, e); if (r < 0) { log_full(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, "Cannot add dependency job for unit %s, ignoring: %s", dep->id, bus_error(e, r)); @@ -927,7 +928,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUISITE], i) { - r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, true, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, true, override, false, false, false, ignore_order, e); if (r < 0) { if (r != -EBADR) goto fail; @@ -938,7 +939,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUISITE_OVERRIDABLE], i) { - r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, !override, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_VERIFY_ACTIVE, dep, ret, !override, override, false, false, false, ignore_order, e); if (r < 0) { log_full(r == -EADDRNOTAVAIL ? LOG_DEBUG : LOG_WARNING, "Cannot add dependency job for unit %s, ignoring: %s", dep->id, bus_error(e, r)); @@ -949,7 +950,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_CONFLICTS], i) { - r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, override, true, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, override, false, true, false, ignore_order, e); if (r < 0) { if (r != -EBADR) goto fail; @@ -960,7 +961,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_CONFLICTED_BY], i) { - r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, false, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, false, override, false, false, false, ignore_order, e); if (r < 0) { log_warning("Cannot add dependency job for unit %s, ignoring: %s", dep->id, bus_error(e, r)); @@ -974,7 +975,7 @@ int transaction_add_job_and_dependencies( if (type == JOB_STOP || type == JOB_RESTART) { SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUIRED_BY], i) { - r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, false, ignore_order, e); if (r < 0) { if (r != -EBADR) goto fail; @@ -985,7 +986,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_BOUND_BY], i) { - r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, false, ignore_order, e); if (r < 0) { if (r != -EBADR) goto fail; @@ -996,7 +997,7 @@ int transaction_add_job_and_dependencies( } SET_FOREACH(dep, ret->unit->dependencies[UNIT_CONSISTS_OF], i) { - r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, false, ignore_order, e); if (r < 0) { if (r != -EBADR) goto fail; @@ -1011,7 +1012,7 @@ int transaction_add_job_and_dependencies( if (type == JOB_RELOAD) { SET_FOREACH(dep, ret->unit->dependencies[UNIT_PROPAGATES_RELOAD_TO], i) { - r = transaction_add_job_and_dependencies(tr, JOB_RELOAD, dep, ret, false, override, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, JOB_RELOAD, dep, ret, false, override, false, false, false, ignore_order, e); if (r < 0) { log_warning("Cannot add dependency reload job for unit %s, ignoring: %s", dep->id, bus_error(e, r)); @@ -1056,7 +1057,7 @@ int transaction_add_isolate_jobs(Transaction *tr, Manager *m) { if (hashmap_get(tr->jobs, u)) continue; - r = transaction_add_job_and_dependencies(tr, JOB_STOP, u, tr->anchor_job, true, false, false, false, false, NULL); + r = transaction_add_job_and_dependencies(tr, JOB_STOP, u, tr->anchor_job, true, false, false, false, false, false, NULL); if (r < 0) log_warning("Cannot add isolate job for unit %s, ignoring: %s", u->id, strerror(-r)); } diff --git a/src/core/transaction.h b/src/core/transaction.h index 67ace4d..3b66a57 100644 --- a/src/core/transaction.h +++ b/src/core/transaction.h @@ -38,13 +38,13 @@ struct Transaction { Transaction *transaction_new(void); void transaction_free(Transaction *tr); -int transaction_add_job_and_dependencies( - Transaction *tr, +int transaction_add_job_and_dependencies(Transaction *tr, JobType type, Unit *unit, Job *by, bool matters, bool override, + bool user_start, bool conflicts, bool ignore_requirements, bool ignore_order, diff --git a/src/core/unit.c b/src/core/unit.c index 0d5d15e..5f5e170 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -1129,7 +1129,7 @@ static void unit_check_unneeded(Unit *u) { log_info("Service %s is not needed anymore. Stopping.", u->id); /* Ok, nobody needs us anymore. Sniff. Then let's commit suicide */ - manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL); + manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, false, NULL, NULL); } static void retroactively_start_dependencies(Unit *u) { @@ -1142,35 +1142,35 @@ static void retroactively_start_dependencies(Unit *u) { SET_FOREACH(other, u->dependencies[UNIT_REQUIRES], i) if (!set_get(u->dependencies[UNIT_AFTER], other) && !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL); + manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, false, NULL, NULL); SET_FOREACH(other, u->dependencies[UNIT_BINDS_TO], i) if (!set_get(u->dependencies[UNIT_AFTER], other) && !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL); + manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, false, NULL, NULL); SET_FOREACH(other, u->dependencies[UNIT_REQUIRES_OVERRIDABLE], i) if (!set_get(u->dependencies[UNIT_AFTER], other) && !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_START, other, JOB_FAIL, false, NULL, NULL); + manager_add_job(u->manager, JOB_START, other, JOB_FAIL, false, false, NULL, NULL); SET_FOREACH(other, u->dependencies[UNIT_REQUISITE], i) if (!set_get(u->dependencies[UNIT_AFTER], other) && !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL); + manager_add_job(u->manager, JOB_START, other, JOB_REPLACE, true, false, NULL, NULL); SET_FOREACH(other, u->dependencies[UNIT_WANTS], i) if (!set_get(u->dependencies[UNIT_AFTER], other) && !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_START, other, JOB_FAIL, false, NULL, NULL); + manager_add_job(u->manager, JOB_START, other, JOB_FAIL, false, false, NULL, NULL); SET_FOREACH(other, u->dependencies[UNIT_CONFLICTS], i) if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, NULL, NULL); + manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, false, NULL, NULL); SET_FOREACH(other, u->dependencies[UNIT_CONFLICTED_BY], i) if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, NULL, NULL); + manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, false, NULL, NULL); } static void retroactively_stop_dependencies(Unit *u) { @@ -1183,7 +1183,7 @@ static void retroactively_stop_dependencies(Unit *u) { /* Pull down units which are bound to us recursively if enabled */ SET_FOREACH(other, u->dependencies[UNIT_BOUND_BY], i) if (!UNIT_IS_INACTIVE_OR_DEACTIVATING(unit_active_state(other))) - manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, NULL, NULL); + manager_add_job(u->manager, JOB_STOP, other, JOB_REPLACE, true, false, NULL, NULL); } static void check_unneeded_dependencies(Unit *u) { @@ -1228,7 +1228,7 @@ void unit_trigger_on_failure(Unit *u) { SET_FOREACH(other, u->dependencies[UNIT_ON_FAILURE], i) { int r; - if ((r = manager_add_job(u->manager, JOB_START, other, u->on_failure_isolate ? JOB_ISOLATE : JOB_REPLACE, true, NULL, NULL)) < 0) + if ((r = manager_add_job(u->manager, JOB_START, other, u->on_failure_isolate ? JOB_ISOLATE : JOB_REPLACE, true, false, NULL, NULL)) < 0) log_error("Failed to enqueue OnFailure= job: %s", strerror(-r)); } } @@ -2620,7 +2620,7 @@ int unit_coldplug(Unit *u) { return r; } else if (u->deserialized_job >= 0) { /* legacy */ - r = manager_add_job(u->manager, u->deserialized_job, u, JOB_IGNORE_REQUIREMENTS, false, NULL, NULL); + r = manager_add_job(u->manager, u->deserialized_job, u, JOB_IGNORE_REQUIREMENTS, false, false, NULL, NULL); if (r < 0) return r; diff --git a/src/test/test-engine.c b/src/test/test-engine.c index 11389a5..37f109c 100644 --- a/src/test/test-engine.c +++ b/src/test/test-engine.c @@ -42,7 +42,7 @@ int main(int argc, char *argv[]) { manager_dump_units(m, stdout, "\t"); printf("Test1: (Trivial)\n"); - assert_se(manager_add_job(m, JOB_START, c, JOB_REPLACE, false, NULL, &j) == 0); + assert_se(manager_add_job(m, JOB_START, c, JOB_REPLACE, false, false, NULL, &j) == 0); manager_dump_jobs(m, stdout, "\t"); printf("Load2:\n"); @@ -52,15 +52,15 @@ int main(int argc, char *argv[]) { manager_dump_units(m, stdout, "\t"); printf("Test2: (Cyclic Order, Unfixable)\n"); - assert_se(manager_add_job(m, JOB_START, d, JOB_REPLACE, false, NULL, &j) == -ENOEXEC); + assert_se(manager_add_job(m, JOB_START, d, JOB_REPLACE, false, false, NULL, &j) == -ENOEXEC); manager_dump_jobs(m, stdout, "\t"); printf("Test3: (Cyclic Order, Fixable, Garbage Collector)\n"); - assert_se(manager_add_job(m, JOB_START, e, JOB_REPLACE, false, NULL, &j) == 0); + assert_se(manager_add_job(m, JOB_START, e, JOB_REPLACE, false, false, NULL, &j) == 0); manager_dump_jobs(m, stdout, "\t"); printf("Test4: (Identical transaction)\n"); - assert_se(manager_add_job(m, JOB_START, e, JOB_FAIL, false, NULL, &j) == 0); + assert_se(manager_add_job(m, JOB_START, e, JOB_FAIL, false, false, NULL, &j) == 0); manager_dump_jobs(m, stdout, "\t"); printf("Load3:\n"); @@ -68,21 +68,21 @@ int main(int argc, char *argv[]) { manager_dump_units(m, stdout, "\t"); printf("Test5: (Colliding transaction, fail)\n"); - assert_se(manager_add_job(m, JOB_START, g, JOB_FAIL, false, NULL, &j) == -EEXIST); + assert_se(manager_add_job(m, JOB_START, g, JOB_FAIL, false, false, NULL, &j) == -EEXIST); printf("Test6: (Colliding transaction, replace)\n"); - assert_se(manager_add_job(m, JOB_START, g, JOB_REPLACE, false, NULL, &j) == 0); + assert_se(manager_add_job(m, JOB_START, g, JOB_REPLACE, false, false, NULL, &j) == 0); manager_dump_jobs(m, stdout, "\t"); printf("Test7: (Unmergeable job type, fail)\n"); - assert_se(manager_add_job(m, JOB_STOP, g, JOB_FAIL, false, NULL, &j) == -EEXIST); + assert_se(manager_add_job(m, JOB_STOP, g, JOB_FAIL, false, false, NULL, &j) == -EEXIST); printf("Test8: (Mergeable job type, fail)\n"); - assert_se(manager_add_job(m, JOB_RESTART, g, JOB_FAIL, false, NULL, &j) == 0); + assert_se(manager_add_job(m, JOB_RESTART, g, JOB_FAIL, false, false, NULL, &j) == 0); manager_dump_jobs(m, stdout, "\t"); printf("Test9: (Unmergeable job type, replace)\n"); - assert_se(manager_add_job(m, JOB_STOP, g, JOB_REPLACE, false, NULL, &j) == 0); + assert_se(manager_add_job(m, JOB_STOP, g, JOB_REPLACE, false, false, NULL, &j) == 0); manager_dump_jobs(m, stdout, "\t"); printf("Load4:\n"); @@ -90,7 +90,7 @@ int main(int argc, char *argv[]) { manager_dump_units(m, stdout, "\t"); printf("Test10: (Unmergeable job type of auxiliary job, fail)\n"); - assert_se(manager_add_job(m, JOB_START, h, JOB_FAIL, false, NULL, &j) == 0); + assert_se(manager_add_job(m, JOB_START, h, JOB_FAIL, false, false, NULL, &j) == 0); manager_dump_jobs(m, stdout, "\t"); manager_free(m); -- 1.7.6.5
_______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel