chiark / gitweb /
manager: consider the active job when merging
authorMichal Schmidt <mschmidt@redhat.com>
Sat, 2 Jul 2011 12:52:52 +0000 (14:52 +0200)
committerMichal Schmidt <mschmidt@redhat.com>
Sat, 2 Jul 2011 15:32:05 +0000 (17:32 +0200)
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

src/manager.c

index 92a6dff14467b9ddc81492e928a3b18915e7a948..258b3ca4b77942eda329a7576c81a1f34a005053 100644 (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);
         }