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

Reply via email to