diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-10-24 23:26:18 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-10-24 23:26:18 +0100 |
| commit | 19556e0f1bb854fffffc7d473dea5335c85c667a (patch) | |
| tree | 185de1a1ceb760ea24d2fa3f9d907c0ae61315bc /src/lib | |
| parent | 819590f9f8217235ebf4467b1d24e1aec1f97c29 (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.cc | 7 | ||||
| -rw-r--r-- | src/lib/job.h | 5 |
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; }; |
