Fix nonfunctional send-problem-report.
[dcpomatic.git] / src / lib / server_finder.cc
index 315d8d79dadc00b5d8cb87363b8a2e59b3929c0d..8685c830f2a9d349075ef639190c523f17da68b3 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,16 @@ ServerFinder::~ServerFinder ()
        _stop = true;
 
        _search_condition.notify_all ();
-       _search_thread->join ();
+       if (_search_thread) {
+               DCPOMATIC_ASSERT (_search_thread->joinable ());
+               _search_thread->join ();
+       }
 
        _listen_io_service.stop ();
-       _listen_thread->join ();
+       if (_listen_thread) {
+               DCPOMATIC_ASSERT (_listen_thread->joinable ());
+               _listen_thread->join ();
+       }
 }
 
 void
@@ -194,6 +206,7 @@ ServerFinder::instance ()
 {
        if (!_instance) {
                _instance = new ServerFinder ();
+               _instance->start ();
        }
 
        return _instance;
@@ -222,12 +235,6 @@ ServerFinder::config_changed (Config::Property what)
                        _servers.clear ();
                }
                ServersListChanged ();
-               search_now ();
+               _search_condition.notify_all ();
        }
 }
-
-void
-ServerFinder::search_now ()
-{
-       _search_condition.notify_all ();
-}