diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-07-22 08:52:02 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-07-22 08:52:02 +0100 |
| commit | c9c01e5035c0b625fad840c209d6e76ea371a6f9 (patch) | |
| tree | 554927e884478f95941339c9b186bb7d0465fced /src | |
| parent | d5c23e121ec9ed85a350e552a885162db82de950 (diff) | |
Try to fix deadlock.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/job.cc | 18 |
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 */ |
