X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fencode_server_finder.cc;h=1c612025733f9f95a3232394c7eceb843df529ab;hb=ce058471aa9995adac968cecc205f5a4319f449e;hp=6cdd8ce3cc11adb05062c9fd8fdc8744588e33b5;hpb=a27a2c35f0a50d5b03b3731f01f595410fe28ec7;p=dcpomatic.git diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc index 6cdd8ce3c..1c6120257 100644 --- a/src/lib/encode_server_finder.cc +++ b/src/lib/encode_server_finder.cc @@ -27,6 +27,7 @@ #include "dcpomatic_socket.h" #include #include +#include #include #include @@ -40,14 +41,15 @@ using boost::shared_ptr; using boost::scoped_array; using boost::weak_ptr; using boost::optional; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif using dcp::raw_convert; EncodeServerFinder* EncodeServerFinder::_instance = 0; EncodeServerFinder::EncodeServerFinder () - : _search_thread (0) - , _listen_thread (0) - , _stop (false) + : _stop (false) { Config::instance()->Changed.connect (boost::bind (&EncodeServerFinder::config_changed, this, _1)); } @@ -55,11 +57,11 @@ EncodeServerFinder::EncodeServerFinder () void EncodeServerFinder::start () { - _search_thread = new boost::thread (boost::bind (&EncodeServerFinder::search_thread, this)); - _listen_thread = new boost::thread (boost::bind (&EncodeServerFinder::listen_thread, this)); + _search_thread = boost::thread (boost::bind(&EncodeServerFinder::search_thread, this)); + _listen_thread = boost::thread (boost::bind(&EncodeServerFinder::listen_thread, this)); #ifdef DCPOMATIC_LINUX - pthread_setname_np (_search_thread->native_handle(), "encode-server-search"); - pthread_setname_np (_listen_thread->native_handle(), "encode-server-listen"); + pthread_setname_np (_search_thread.native_handle(), "encode-server-search"); + pthread_setname_np (_listen_thread.native_handle(), "encode-server-listen"); #endif } @@ -72,31 +74,19 @@ EncodeServerFinder::~EncodeServerFinder () void EncodeServerFinder::stop () { + boost::this_thread::disable_interruption dis; + _stop = true; _search_condition.notify_all (); - if (_search_thread) { - /* Ideally this would be a DCPOMATIC_ASSERT(_search_thread->joinable()) but we - can't throw exceptions from a destructor. - */ - if (_search_thread->joinable ()) { - _search_thread->join (); - } - } - delete _search_thread; - _search_thread = 0; + try { + _search_thread.join(); + } catch (...) {} _listen_io_service.stop (); - if (_listen_thread) { - /* Ideally this would be a DCPOMATIC_ASSERT(_listen_thread->joinable()) but we - can't throw exceptions from a destructor. - */ - if (_listen_thread->joinable ()) { - _listen_thread->join (); - } - } - delete _listen_thread; - _listen_thread = 0; + try { + _listen_thread.join (); + } catch (...) {} boost::mutex::scoped_lock lm (_servers_mutex); _servers.clear ();