summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-09-30 11:35:18 +0100
committerCarl Hetherington <cth@carlh.net>2016-09-30 11:35:18 +0100
commit66ba4487fa7bbf7a48d428dd49ce634cd62004d3 (patch)
tree4e4ef2dac9090fcad69b7be7596d8ea7b09c08a6 /src
parent992a640cb1ceff2a57867f3167fec71ee67bf8a4 (diff)
Speed up response to a request to pause a job.
Diffstat (limited to 'src')
-rw-r--r--src/lib/job.cc29
-rw-r--r--src/lib/job.h1
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;