From 1c0f437ea1cbd6231ef9395b1f07c982cd408c39 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 9 Nov 2013 20:29:19 +0000 Subject: Try to fix crash on drop()ping JobManager. More debugging when resampler fails. --- src/lib/job_manager.cc | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/lib/job_manager.cc') diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index 2695d3d10..056b9f925 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -37,9 +37,23 @@ using boost::weak_ptr; JobManager* JobManager::_instance = 0; JobManager::JobManager () - : _last_active_jobs (false) + : _terminate (false) + , _last_active_jobs (false) + , _scheduler (new boost::thread (boost::bind (&JobManager::scheduler, this))) { - boost::thread (boost::bind (&JobManager::scheduler, this)); + +} + +JobManager::~JobManager () +{ + { + boost::mutex::scoped_lock lm (_mutex); + _terminate = true; + } + + if (_scheduler->joinable ()) { + _scheduler->join (); + } } shared_ptr @@ -98,6 +112,10 @@ JobManager::scheduler () { boost::mutex::scoped_lock lm (_mutex); + if (_terminate) { + return; + } + for (list >::iterator i = _jobs.begin(); i != _jobs.end(); ++i) { if (!(*i)->finished ()) { -- cgit v1.2.3