If we happen to have a very long running job, it is not desired that
all other jobs remain stuck waiting this job to complete. This can
happen if we first start all jobs, causing the scheduler to wait
indefinitely for a "kick", then the last job takes forever to finish.
To fix this, every time a job finishes, it is better to reschedule the
job poller in case new job has become schedulable.
Signed-off-by: Timo Kokkonen <timo.t.kokkonen@iki.fi>
* ensures next time we start spawning worker threads
* the first thread will have number zero on its name.
*/
- if (!workers_active) {
+ if (!workers_active)
worker_count = 0;
- /*
- * Kick the job poller, just to print the time of next
- * update on the logs
- */
- notify_job_request();
- }
+ /*
+ * Kick the job poller. If all jobs were active at this point
+ * the scheduler thread will wait indefinitely until someone
+ * tells it to do something. We may now know when next job is
+ * available, so it is better for the scheduler to recalculate
+ * its sleep time.
+ */
+ notify_job_request();
mutex_unlock(&work_stats_mutex);