static int manager_jobs_in_progress_mod_timer(Manager *m) {
struct itimerspec its;
+ if (m->jobs_in_progress_watch.type != WATCH_JOBS_IN_PROGRESS)
+ return 0;
+
zero(its);
its.it_value.tv_sec = JOBS_IN_PROGRESS_WAIT_SEC;
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;
NULL);
/* Restart the watch */
+ epoll_ctl(m->epoll_fd, EPOLL_CTL_DEL, m->time_change_watch.fd,
+ NULL);
close_nointr_nofail(m->time_change_watch.fd);
watch_init(&m->time_change_watch);
manager_setup_time_change(m);
assert(m);
+ if (m->n_running_jobs == 0)
+ manager_unwatch_jobs_in_progress(m);
+
if (hashmap_size(m->jobs) > 0) {
manager_jobs_in_progress_mod_timer(m);
return;
/* Turn off confirm spawn now */
m->confirm_spawn = false;
- manager_unwatch_jobs_in_progress(m);
-
if (dual_timestamp_is_set(&m->finish_timestamp))
return;