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
This commit is contained in:
Michal Schmidt
2011-07-02 17:32:05 +02:00
parent 21bdae12e1
commit 1b562e4604
+3
View File
@@ -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);
}