summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-11-27 23:08:41 +0000
committerCarl Hetherington <cth@carlh.net>2018-11-27 23:08:41 +0000
commitb8f0865d6a5d182dc4c718b9320c82091864e55b (patch)
treea5c362b1a0c2d4dc6a357ba5ef7305ef79d8fe9b /src
parent292347a2615ada124cb807235ae941dde3123b61 (diff)
Fix active job signalling.
Diffstat (limited to 'src')
-rw-r--r--src/lib/job_manager.cc18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc
index 44c81e725..e2302a215 100644
--- a/src/lib/job_manager.cc
+++ b/src/lib/job_manager.cc
@@ -153,15 +153,12 @@ JobManager::scheduler ()
boost::mutex::scoped_lock lm (_mutex);
- optional<string> active_job;
-
while (true) {
bool have_new = false;
bool have_running = false;
BOOST_FOREACH (shared_ptr<Job> i, _jobs) {
if (i->running()) {
have_running = true;
- active_job = i->json_name();
}
if (i->is_new()) {
have_new = true;
@@ -183,23 +180,24 @@ JobManager::scheduler ()
if (i->is_new()) {
_connections.push_back (i->FinishedImmediate.connect(bind(&JobManager::job_finished, this)));
i->start ();
+ 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;
}
}
-
- lm.unlock ();
-
- if (active_job != _last_active_job) {
- emit (boost::bind (boost::ref (ActiveJobsChanged), _last_active_job, active_job));
- _last_active_job = active_job;
- }
}
}
void
JobManager::job_finished ()
{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ emit (boost::bind (boost::ref (ActiveJobsChanged), _last_active_job, optional<string>()));
+ _last_active_job = optional<string>();
+ }
+
_empty_condition.notify_all ();
}