From 19556e0f1bb854fffffc7d473dea5335c85c667a Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 24 Oct 2014 23:26:18 +0100 Subject: Fix job pausing to actually work, and always add Pause buttons to JobManagerViews (part of #344). --- src/lib/job.cc | 7 +++++-- src/lib/job.h | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src/lib') 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 _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; }; -- cgit v1.2.3