diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-09-30 11:35:18 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-09-30 11:35:18 +0100 |
| commit | 66ba4487fa7bbf7a48d428dd49ce634cd62004d3 (patch) | |
| tree | 4e4ef2dac9090fcad69b7be7596d8ea7b09c08a6 /src | |
| parent | 992a640cb1ceff2a57867f3167fec71ee67bf8a4 (diff) | |
Speed up response to a request to pause a job.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/job.cc | 29 | ||||
| -rw-r--r-- | src/lib/job.h | 1 |
2 files changed, 20 insertions, 10 deletions
diff --git a/src/lib/job.cc b/src/lib/job.cc index 51deca404..167692863 100644 --- a/src/lib/job.cc +++ b/src/lib/job.cc @@ -279,12 +279,27 @@ Job::elapsed_sub_time () const return time (0) - _sub_start_time; } +/** Check to see if this job has been interrupted or paused */ +void +Job::check_for_interruption_or_pause () +{ + boost::this_thread::interruption_point (); + + boost::mutex::scoped_lock lm (_state_mutex); + while (_state == PAUSED) { + emit (boost::bind (boost::ref (Progress))); + _pause_changed.wait (lm); + } +} + /** Set the progress of the current part of the job. * @param p Progress (from 0 to 1) */ void Job::set_progress (float p, bool force) { + check_for_interruption_or_pause (); + if (!force) { /* Check for excessively frequent progress reporting */ boost::mutex::scoped_lock lm (_progress_mutex); @@ -306,18 +321,11 @@ Job::set_progress (float p, bool force) void Job::set_progress_common (optional<float> p) { - boost::mutex::scoped_lock lm (_progress_mutex); - _progress = p; - boost::this_thread::interruption_point (); - - boost::mutex::scoped_lock lm2 (_state_mutex); - while (_state == PAUSED) { - _pause_changed.wait (lm2); + { + boost::mutex::scoped_lock lm (_progress_mutex); + _progress = p; } - lm.unlock (); - lm2.unlock (); - emit (boost::bind (boost::ref (Progress))); } @@ -378,6 +386,7 @@ Job::set_error (string s, string d) void Job::set_progress_unknown () { + check_for_interruption_or_pause (); set_progress_common (optional<float> ()); } diff --git a/src/lib/job.h b/src/lib/job.h index 804755ef8..660ddaa13 100644 --- a/src/lib/job.h +++ b/src/lib/job.h @@ -103,6 +103,7 @@ protected: void set_state (State); void set_error (std::string s, std::string d); int elapsed_sub_time () const; + void check_for_interruption_or_pause (); boost::shared_ptr<const Film> _film; |
