summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2011-07-02 14:52:52 +0200
committerMichal Schmidt <mschmidt@redhat.com>2011-07-02 17:32:05 +0200
commit1b562e4604f8833bc21fd251b8bdb45c9c224df4 (patch)
tree5c2c9c3cad2db23a87b903c73e8e723592bc3a2b
parent21bdae12e11ae20460715475d8a0c991f15464ac (diff)
manager: consider the active job when merging
In some cases systemd forgets to start enabled services, e.g. in this scenario: 1. The job "sendmail.service/start" is installed. 2. Before systemd proceeds with this job, a process requests a reload of sendmail. The job "sendmail.service/reload" is enqueued. 3. The original job is silently discarded. The service is not started. The reload job proceeds by doing nothing. The fix is to allow merging transaction jobs with the active job. With the fix the resulting merged job "sendmail.service/reload-or-start" is installed and the service works as expected. https://bugzilla.redhat.com/show_bug.cgi?id=633774
-rw-r--r--src/manager.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/manager.c b/src/manager.c
index 92a6dff144..258b3ca4b7 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -897,6 +897,9 @@ static int transaction_merge_jobs(Manager *m, DBusError *e) {
transaction_merge_and_delete_job(m, j, k, t);
}
+ if (j->unit->meta.job && !j->installed)
+ transaction_merge_and_delete_job(m, j, j->unit->meta.job, t);
+
assert(!j->transaction_next);
assert(!j->transaction_prev);
}