summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--src/lib/encode_server_finder.cc17
-rw-r--r--src/lib/encode_server_finder.h10
-rw-r--r--src/lib/encoder.cc10
-rw-r--r--src/tools/dcpomatic_cli.cc2
-rw-r--r--test/test.cc2
6 files changed, 24 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 062677604..c5645ba20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
2016-07-20 Carl Hetherington <cth@carlh.net>
+ * Try to fix -r option to dcpomatic_cli.
+
* Try to fix intermittent hangs with encoding servers.
2016-07-14 Carl Hetherington <cth@carlh.net>
diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc
index eebf404fa..135a8bce8 100644
--- a/src/lib/encode_server_finder.cc
+++ b/src/lib/encode_server_finder.cc
@@ -43,8 +43,7 @@ using boost::weak_ptr;
EncodeServerFinder* EncodeServerFinder::_instance = 0;
EncodeServerFinder::EncodeServerFinder ()
- : _disabled (false)
- , _search_thread (0)
+ : _search_thread (0)
, _listen_thread (0)
, _stop (false)
{
@@ -58,8 +57,15 @@ EncodeServerFinder::start ()
_listen_thread = new boost::thread (boost::bind (&EncodeServerFinder::listen_thread, this));
}
+
EncodeServerFinder::~EncodeServerFinder ()
{
+ stop ();
+}
+
+void
+EncodeServerFinder::stop ()
+{
_stop = true;
_search_condition.notify_all ();
@@ -71,6 +77,8 @@ EncodeServerFinder::~EncodeServerFinder ()
_search_thread->join ();
}
}
+ delete _search_thread;
+ _search_thread = 0;
_listen_io_service.stop ();
if (_listen_thread) {
@@ -81,6 +89,11 @@ EncodeServerFinder::~EncodeServerFinder ()
_listen_thread->join ();
}
}
+ delete _listen_thread;
+ _listen_thread = 0;
+
+ boost::mutex::scoped_lock lm (_servers_mutex);
+ _servers.clear ();
}
void
diff --git a/src/lib/encode_server_finder.h b/src/lib/encode_server_finder.h
index 58c7677f6..c639dfe3b 100644
--- a/src/lib/encode_server_finder.h
+++ b/src/lib/encode_server_finder.h
@@ -37,13 +37,7 @@ public:
static EncodeServerFinder* instance ();
static void drop ();
- void disable () {
- _disabled = true;
- }
-
- bool disabled () const {
- return _disabled;
- }
+ void stop ();
std::list<EncodeServerDescription> servers () const;
@@ -65,8 +59,6 @@ private:
void config_changed (Config::Property what);
- bool _disabled;
-
/** Thread to periodically issue broadcasts and requests to find encoding servers */
boost::thread* _search_thread;
/** Thread to listen to the responses from servers */
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc
index 652412ddf..0c41d8d80 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/encoder.cc
@@ -78,12 +78,10 @@ Encoder::~Encoder ()
void
Encoder::begin ()
{
- if (!EncodeServerFinder::instance()->disabled ()) {
- weak_ptr<Encoder> wp = shared_from_this ();
- _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect (
- boost::bind (&Encoder::call_servers_list_changed, wp)
- );
- }
+ weak_ptr<Encoder> wp = shared_from_this ();
+ _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect (
+ boost::bind (&Encoder::call_servers_list_changed, wp)
+ );
}
/* We don't want the servers-list-changed callback trying to do things
diff --git a/src/tools/dcpomatic_cli.cc b/src/tools/dcpomatic_cli.cc
index 1a0ffda00..096a3b118 100644
--- a/src/tools/dcpomatic_cli.cc
+++ b/src/tools/dcpomatic_cli.cc
@@ -256,7 +256,7 @@ main (int argc, char* argv[])
signal_manager = new SignalManager ();
if (no_remote) {
- EncodeServerFinder::instance()->disable ();
+ EncodeServerFinder::instance()->stop ();
}
if (json_port) {
diff --git a/test/test.cc b/test/test.cc
index c57f76e61..7a759314d 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -81,7 +81,7 @@ struct TestConfig
Config::instance()->set_default_j2k_bandwidth (100000000);
Config::instance()->set_log_types (LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR);
- EncodeServerFinder::instance()->disable ();
+ EncodeServerFinder::instance()->stop ();
signal_manager = new TestSignalManager ();
}