projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Re-work idle handling from previous commit.
[dcpomatic.git]
/
src
/
lib
/
job_manager.cc
diff --git
a/src/lib/job_manager.cc
b/src/lib/job_manager.cc
index 5fcb7086cf4bf586170ed2a74e8b2cff4f1213e7..26e2d28970a71c0f5a9d90b7582ed2738fd2fca0 100644
(file)
--- a/
src/lib/job_manager.cc
+++ b/
src/lib/job_manager.cc
@@
-137,8
+137,8
@@
bool
JobManager::errors () const
{
boost::mutex::scoped_lock lm (_mutex);
JobManager::errors () const
{
boost::mutex::scoped_lock lm (_mutex);
-
for (list<shared_ptr<Job> >::const_iterator i = _jobs.begin(); i != _jobs.end(); ++i
) {
- if (
(*i)
->finished_in_error ()) {
+
BOOST_FOREACH (shared_ptr<Job> i, _jobs
) {
+ if (
i
->finished_in_error ()) {
return true;
}
}
return true;
}
}
@@
-153,15
+153,12
@@
JobManager::scheduler ()
boost::mutex::scoped_lock lm (_mutex);
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;
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;
}
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 ();
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;
}
}
/* 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 ()
{
}
}
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 ();
}
_empty_condition.notify_all ();
}
@@
-235,7
+233,7
@@
JobManager::analyse_audio (
BOOST_FOREACH (shared_ptr<Job> i, _jobs) {
shared_ptr<AnalyseAudioJob> a = dynamic_pointer_cast<AnalyseAudioJob> (i);
BOOST_FOREACH (shared_ptr<Job> i, _jobs) {
shared_ptr<AnalyseAudioJob> a = dynamic_pointer_cast<AnalyseAudioJob> (i);
- if (a && a->p
laylist () == playlist
) {
+ if (a && a->p
ath() == film->audio_analysis_path(playlist)
) {
i->when_finished (connection, ready);
return;
}
i->when_finished (connection, ready);
return;
}
@@
-250,6
+248,7
@@
JobManager::analyse_audio (
job.reset (new AnalyseAudioJob (film, playlist, from_zero));
connection = job->Finished.connect (ready);
_jobs.push_back (job);
job.reset (new AnalyseAudioJob (film, playlist, from_zero));
connection = job->Finished.connect (ready);
_jobs.push_back (job);
+ _empty_condition.notify_all ();
}
emit (boost::bind (boost::ref (JobAdded), weak_ptr<Job> (job)));
}
emit (boost::bind (boost::ref (JobAdded), weak_ptr<Job> (job)));