X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fjob_manager.cc;h=056b9f925e1b237946122d804241614bb87f416c;hb=9e1343fb30df204811e80bfd1387574b9d383a09;hp=95961c3fcd99bb468c648adadde387fc3150c9f3;hpb=69812a7d02f5714a80a0a131b96f5f76a8f3c3a3;p=dcpomatic.git diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index 95961c3fc..056b9f925 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -30,15 +30,30 @@ using std::string; using std::list; +using std::cout; using boost::shared_ptr; 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 @@ -97,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 ()) { @@ -137,3 +156,10 @@ JobManager::instance () return _instance; } + +void +JobManager::drop () +{ + delete _instance; + _instance = 0; +}