summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-22 08:52:02 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-22 08:52:02 +0100
commitc9c01e5035c0b625fad840c209d6e76ea371a6f9 (patch)
tree554927e884478f95941339c9b186bb7d0465fced /src
parentd5c23e121ec9ed85a350e552a885162db82de950 (diff)
Try to fix deadlock.
Diffstat (limited to 'src')
-rw-r--r--src/lib/job.cc18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/lib/job.cc b/src/lib/job.cc
index 18df40878..e63ea6dc8 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -179,15 +179,21 @@ Job::paused () const
void
Job::set_state (State s)
{
- boost::mutex::scoped_lock lm (_state_mutex);
- _state = s;
+ bool finished = false;
+
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _state = s;
- if (_state == FINISHED_OK || _state == FINISHED_ERROR || _state == FINISHED_CANCELLED) {
- _ran_for = elapsed_time ();
- if (ui_signaller) {
- ui_signaller->emit (boost::bind (boost::ref (Finished)));
+ if (_state == FINISHED_OK || _state == FINISHED_ERROR || _state == FINISHED_CANCELLED) {
+ _ran_for = elapsed_time ();
+ finished = true;
}
}
+
+ if (finished && ui_signaller) {
+ ui_signaller->emit (boost::bind (boost::ref (Finished)));
+ }
}
/** @return Time (in seconds) that this job has been running */