Lots of #include <iostream>s for Arch.
[dcpomatic.git] / src / lib / server_finder.cc
index 1727016e63919ed9d9b2f2748a14304cab1b6ea1..4b532f98129d4f70386040d9dfc182761973312f 100644 (file)
@@ -27,6 +27,7 @@
 #include "raw_convert.h"
 #include <libcxml/cxml.h>
 #include <boost/lambda/lambda.hpp>
+#include <iostream>
 
 #include "i18n.h"
 
@@ -45,10 +46,15 @@ ServerFinder::ServerFinder ()
        , _search_thread (0)
        , _listen_thread (0)
        , _stop (false)
+{
+       Config::instance()->Changed.connect (boost::bind (&ServerFinder::config_changed, this, _1));
+}
+
+void
+ServerFinder::start ()
 {
        _search_thread = new boost::thread (boost::bind (&ServerFinder::search_thread, this));
        _listen_thread = new boost::thread (boost::bind (&ServerFinder::listen_thread, this));
-       Config::instance()->Changed.connect (boost::bind (&ServerFinder::config_changed, this, _1));
 }
 
 ServerFinder::~ServerFinder ()
@@ -56,10 +62,14 @@ ServerFinder::~ServerFinder ()
        _stop = true;
 
        _search_condition.notify_all ();
-       _search_thread->join ();
+       if (_search_thread) {
+               _search_thread->join ();
+       }
 
        _listen_io_service.stop ();
-       _listen_thread->join ();
+       if (_listen_thread) {
+               _listen_thread->join ();
+       }
 }
 
 void
@@ -168,7 +178,7 @@ ServerFinder::handle_accept (boost::system::error_code ec, shared_ptr<Socket> so
        if (!server_found (ip) && xml->optional_number_child<int>("Version").get_value_or (0) == SERVER_LINK_VERSION) {
                ServerDescription sd (ip, xml->number_child<int> ("Threads"));
                {
-                       boost::mutex::scoped_lock lm (_mutex);
+                       boost::mutex::scoped_lock lm (_servers_mutex);
                        _servers.push_back (sd);
                }
                emit (boost::bind (boost::ref (ServersListChanged)));
@@ -180,7 +190,7 @@ ServerFinder::handle_accept (boost::system::error_code ec, shared_ptr<Socket> so
 bool
 ServerFinder::server_found (string ip) const
 {
-       boost::mutex::scoped_lock lm (_mutex);
+       boost::mutex::scoped_lock lm (_servers_mutex);
        list<ServerDescription>::const_iterator i = _servers.begin();
        while (i != _servers.end() && i->host_name() != ip) {
                ++i;
@@ -194,6 +204,7 @@ ServerFinder::instance ()
 {
        if (!_instance) {
                _instance = new ServerFinder ();
+               _instance->start ();
        }
 
        return _instance;
@@ -209,7 +220,7 @@ ServerFinder::drop ()
 list<ServerDescription>
 ServerFinder::servers () const
 {
-       boost::mutex::scoped_lock lm (_mutex);
+       boost::mutex::scoped_lock lm (_servers_mutex);
        return _servers;
 }
 
@@ -218,7 +229,7 @@ ServerFinder::config_changed (Config::Property what)
 {
        if (what == Config::USE_ANY_SERVERS || what == Config::SERVERS) {
                {
-                       boost::mutex::scoped_lock lm (_mutex);
+                       boost::mutex::scoped_lock lm (_servers_mutex);
                        _servers.clear ();
                }
                ServersListChanged ();