[systemd-commits] src/core

Harald Hoyer harald at kemper.freedesktop.org
Mon Mar 4 05:59:24 PST 2013


 src/core/manager.c |   11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

New commits:
commit a0b6422689e37ffee37742d027f91af8bacfa78d
Author: Michal Schmidt <mschmidt at redhat.com>
Date:   Mon Mar 4 14:38:51 2013 +0100

    core/manager: fix conditions to start and stop watching running jobs
    
    Harald encountered division by zero in manager_print_jobs_in_progress.
    Clearly we had the watch enabled when we shouldn't - there were no
    running jobs in m->jobs, only waiting ones. This is either a deadlock,
    or maybe some of them would be detected as runnable in the next dispatch
    of the run queue. In any case we mustn't crash.
    
    Fix it by starting and stopping the watch based on n_running_jobs
    instead of the number of all jobs.

diff --git a/src/core/manager.c b/src/core/manager.c
index 91d773c..1d18808 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1144,7 +1144,7 @@ unsigned manager_dispatch_run_queue(Manager *m) {
 
         m->dispatching_run_queue = false;
 
-        if (hashmap_size(m->jobs) > 0)
+        if (m->n_running_jobs > 0)
                 manager_watch_jobs_in_progress(m);
 
         return n;
@@ -2368,10 +2368,11 @@ void manager_check_finished(Manager *m) {
 
         assert(m);
 
-        if (hashmap_size(m->jobs) > 0) {
-                manager_jobs_in_progress_mod_timer(m);
+        if (m->n_running_jobs == 0)
+                manager_unwatch_jobs_in_progress(m);
+
+        if (hashmap_size(m->jobs) > 0)
                 return;
-        }
 
         /* Notify Type=idle units that we are done now */
         close_pipe(m->idle_pipe);
@@ -2379,8 +2380,6 @@ void manager_check_finished(Manager *m) {
         /* Turn off confirm spawn now */
         m->confirm_spawn = false;
 
-        manager_unwatch_jobs_in_progress(m);
-
         if (dual_timestamp_is_set(&m->finish_timestamp))
                 return;
 



More information about the systemd-commits mailing list