X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fjob_manager.cc;h=608df7ef0af9063729824f7c3967d6d76b7a02fe;hp=d8c0b02f2f210a58c863fe81d072dfecdd883468;hb=4ee083dc0862b30325c709e913772a6898378d0e;hpb=b2d850326af5c9ffc6486e4cc40bef6e1c051a6f diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index d8c0b02f2..608df7ef0 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -159,39 +159,30 @@ JobManager::scheduler () boost::mutex::scoped_lock lm (_mutex); - while (true) { - bool have_new = false; - bool have_running = false; - for (auto i: _jobs) { - if (i->running()) { - have_running = true; - } - if (i->is_new()) { - have_new = true; - } - } - - if ((!have_running && have_new) || _terminate) { - break; - } - - _empty_condition.wait (lm); - } - if (_terminate) { break; } + bool have_running = false; for (auto i: _jobs) { - if (i->is_new()) { - _connections.push_back (i->FinishedImmediate.connect(bind(&JobManager::job_finished, this))); - i->start (); + if (have_running && i->running()) { + i->pause_by_priority(); + } else if (!have_running && (i->is_new() || i->paused_by_priority())) { + if (i->is_new()) { + _connections.push_back (i->FinishedImmediate.connect(bind(&JobManager::job_finished, this))); + i->start (); + } else { + i->resume (); + } emit (boost::bind (boost::ref (ActiveJobsChanged), _last_active_job, i->json_name())); _last_active_job = i->json_name (); - /* Only start one job at once */ - break; + have_running = true; + } else if (!have_running && i->running()) { + have_running = true; } } + + _empty_condition.wait (lm); } } @@ -319,35 +310,9 @@ JobManager::increase_priority (shared_ptr job) } if (changed) { - priority_changed (); - } -} - - -void -JobManager::priority_changed () -{ - { - boost::mutex::scoped_lock lm (_mutex); - - bool first = true; - for (auto i: _jobs) { - if (first) { - if (i->is_new ()) { - i->start (); - } else if (i->paused_by_priority ()) { - i->resume (); - } - first = false; - } else { - if (i->running ()) { - i->pause_by_priority (); - } - } - } + _empty_condition.notify_all (); + emit (boost::bind(boost::ref(JobsReordered))); } - - emit (boost::bind(boost::ref(JobsReordered))); } @@ -370,7 +335,8 @@ JobManager::decrease_priority (shared_ptr job) } if (changed) { - priority_changed (); + _empty_condition.notify_all (); + emit (boost::bind(boost::ref(JobsReordered))); } }