X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fencode_server_finder.cc;h=5a5a2bfb74cd38a6bf3329f362c7b9c43dbee215;hb=dd9be86db6cde0afa5da0d1d1ac43b42e05dca26;hp=52c8c89496bdec9b46bb5de1487b06d48907eed8;hpb=ea6b2dae46caa1da829fbf499e83cd6ae3b3773a;p=dcpomatic.git diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc index 52c8c8949..5a5a2bfb7 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 @@ -36,10 +37,13 @@ using std::string; using std::list; using std::vector; using std::cout; -using boost::shared_ptr; +using std::shared_ptr; using boost::scoped_array; -using boost::weak_ptr; +using std::weak_ptr; using boost::optional; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif using dcp::raw_convert; EncodeServerFinder* EncodeServerFinder::_instance = 0; @@ -70,25 +74,19 @@ EncodeServerFinder::~EncodeServerFinder () void EncodeServerFinder::stop () { + boost::this_thread::disable_interruption dis; + _stop = true; _search_condition.notify_all (); - if (_search_thread.joinable()) { - try { - _search_thread.join(); - } catch (...) { - - } - } + try { + _search_thread.join(); + } catch (...) {} _listen_io_service.stop (); - if (_listen_thread.joinable()) { - try { - _listen_thread.join (); - } catch (...) { - - } - } + try { + _listen_thread.join (); + } catch (...) {} boost::mutex::scoped_lock lm (_servers_mutex); _servers.clear (); @@ -124,15 +122,10 @@ try } /* Query our `definite' servers (if there are any) */ - vector servers = Config::instance()->servers (); - for (vector::const_iterator i = servers.begin(); i != servers.end(); ++i) { - if (server_found (*i)) { - /* Don't bother asking a server that we already know about */ - continue; - } + BOOST_FOREACH (string const& i, Config::instance()->servers()) { try { boost::asio::ip::udp::resolver resolver (io_service); - boost::asio::ip::udp::resolver::query query (*i, raw_convert (HELLO_PORT)); + boost::asio::ip::udp::resolver::query query (i, raw_convert (HELLO_PORT)); boost::asio::ip::udp::endpoint end_point (*resolver.resolve (query)); socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point); } catch (...) {