X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fupdate_checker.cc;fp=src%2Flib%2Fupdate_checker.cc;h=52dfce7f782ce38ef8405f73fdf8337c90c94daa;hb=0df83d7ba261cdbb5be62db34dae7b972e05ddd9;hp=634328e6aef992c0bee26d0f170657484415d9a6;hpb=6904ca547ce503c9ea06b4def9b9a716068e493c;p=dcpomatic.git diff --git a/src/lib/update_checker.cc b/src/lib/update_checker.cc index 634328e6a..52dfce7f7 100644 --- a/src/lib/update_checker.cc +++ b/src/lib/update_checker.cc @@ -55,7 +55,9 @@ UpdateChecker::UpdateChecker () , _curl (0) , _state (NOT_RUN) , _emits (0) + , _thread (0) , _to_do (0) + , _terminate (false) { _curl = curl_easy_init (); @@ -66,13 +68,26 @@ UpdateChecker::UpdateChecker () string const agent = "dcpomatic/" + string (dcpomatic_version); curl_easy_setopt (_curl, CURLOPT_USERAGENT, agent.c_str ()); +} +void +UpdateChecker::start () +{ _thread = new boost::thread (boost::bind (&UpdateChecker::thread, this)); } UpdateChecker::~UpdateChecker () { - /* We are not cleaning up our thread, but hey well */ + { + boost::mutex::scoped_lock lm (_process_mutex); + _terminate = true; + } + + _condition.notify_all (); + if (_thread) { + _thread->join (); + } + delete _thread; curl_easy_cleanup (_curl); delete[] _buffer; @@ -93,9 +108,14 @@ UpdateChecker::thread () while (true) { /* Block until there is something to do */ boost::mutex::scoped_lock lock (_process_mutex); - while (_to_do == 0) { + while (_to_do == 0 && !_terminate) { _condition.wait (lock); } + + if (_terminate) { + return; + } + --_to_do; lock.unlock (); @@ -173,6 +193,7 @@ UpdateChecker::instance () { if (!_instance) { _instance = new UpdateChecker (); + _instance->start (); } return _instance;