chiark / gitweb /
core: fix running jobs counters after reload/reexec
[elogind.git] / src / core / unit.c
index e2c06ae8b638123fe2df8d90908fb3f408ea2f75..2f0ac00fcf1fe9ab26b1529d43da0085368fd38c 100644 (file)
@@ -1360,11 +1360,6 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
         if (UNIT_IS_INACTIVE_OR_FAILED(os) != UNIT_IS_INACTIVE_OR_FAILED(ns)) {
                 ExecContext *ec = unit_get_exec_context(u);
                 if (ec && exec_context_may_touch_console(ec)) {
-                        /* XXX The counter may get out of sync if the admin edits
-                         * TTY-related unit file properties and issues a daemon-reload
-                         * while the unit is active. No big deal though, because
-                         * it influences only the printing of boot/shutdown
-                         * status messages. */
                         if (UNIT_IS_INACTIVE_OR_FAILED(ns))
                                 m->n_on_console--;
                         else
@@ -1517,7 +1512,8 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
 
         /* Maybe we finished startup and are now ready for being
          * stopped because unneeded? */
-        unit_check_unneeded(u);
+        if (u->manager->n_reloading <= 0)
+                unit_check_unneeded(u);
 
         unit_add_to_dbus_queue(u);
         unit_add_to_gc_queue(u);
@@ -2445,6 +2441,9 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) {
                                         return r;
                                 }
 
+                                if (j->state == JOB_RUNNING)
+                                        u->manager->n_running_jobs++;
+
                                 r = job_install_deserialized(j);
                                 if (r < 0) {
                                         hashmap_remove(u->manager->jobs, UINT32_TO_PTR(j->id));