std::shared_ptr
[dcpomatic.git] / src / lib / encode_server_finder.cc
index 52c8c89496bdec9b46bb5de1487b06d48907eed8..5a5a2bfb74cd38a6bf3329f362c7b9c43dbee215 100644 (file)
@@ -27,6 +27,7 @@
 #include "dcpomatic_socket.h"
 #include <dcp/raw_convert.h>
 #include <libcxml/cxml.h>
+#include <boost/bind/placeholders.hpp>
 #include <boost/lambda/lambda.hpp>
 #include <iostream>
 
@@ -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<string> servers = Config::instance()->servers ();
-               for (vector<string>::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<string> (HELLO_PORT));
+                               boost::asio::ip::udp::resolver::query query (i, raw_convert<string> (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 (...) {