summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-10-24 23:26:18 +0100
committerCarl Hetherington <cth@carlh.net>2014-10-24 23:26:18 +0100
commit19556e0f1bb854fffffc7d473dea5335c85c667a (patch)
tree185de1a1ceb760ea24d2fa3f9d907c0ae61315bc /src/lib
parent819590f9f8217235ebf4467b1d24e1aec1f97c29 (diff)
Fix job pausing to actually work, and always add Pause buttons to JobManagerViews (part of #344).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/job.cc7
-rw-r--r--src/lib/job.h5
2 files changed, 10 insertions, 2 deletions
diff --git a/src/lib/job.cc b/src/lib/job.cc
index 52ec1426c..52276c0ea 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -230,8 +230,9 @@ Job::set_progress (float p, bool force)
_progress = p;
boost::this_thread::interruption_point ();
- if (paused ()) {
- dcpomatic_sleep (1);
+ boost::mutex::scoped_lock lm2 (_state_mutex);
+ while (_state == PAUSED) {
+ _pause_changed.wait (lm2);
}
if (ui_signaller) {
@@ -348,6 +349,7 @@ Job::pause ()
{
if (running ()) {
set_state (PAUSED);
+ _pause_changed.notify_all ();
}
}
@@ -356,5 +358,6 @@ Job::resume ()
{
if (paused ()) {
set_state (RUNNING);
+ _pause_changed.notify_all ();
}
}
diff --git a/src/lib/job.h b/src/lib/job.h
index 97e3fc296..b7dfc5891 100644
--- a/src/lib/job.h
+++ b/src/lib/job.h
@@ -125,6 +125,11 @@ private:
mutable boost::mutex _progress_mutex;
boost::optional<float> _progress;
+ /** condition to signal changes to pause/resume so that we know when to wake;
+ this could be a general _state_change if it made more sense.
+ */
+ boost::condition_variable _pause_changed;
+
int _ran_for;
};