From: Carl Hetherington Date: Wed, 20 Jul 2016 09:47:49 +0000 (+0100) Subject: Do EncodeServerFinder 'disable' in a more sensible way. X-Git-Tag: v2.9.4~1 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=57d00c880094b1dfebaee18f4ecafb1dd44b0afb Do EncodeServerFinder 'disable' in a more sensible way. Just stop the threads and clear the server list when stop() is called. --- diff --git a/ChangeLog b/ChangeLog index 062677604..c5645ba20 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2016-07-20 Carl Hetherington + * Try to fix -r option to dcpomatic_cli. + * Try to fix intermittent hangs with encoding servers. 2016-07-14 Carl Hetherington 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,7 +57,14 @@ EncodeServerFinder::start () _listen_thread = new boost::thread (boost::bind (&EncodeServerFinder::listen_thread, this)); } + EncodeServerFinder::~EncodeServerFinder () +{ + stop (); +} + +void +EncodeServerFinder::stop () { _stop = true; @@ -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 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 wp = shared_from_this (); - _server_found_connection = EncodeServerFinder::instance()->ServersListChanged.connect ( - boost::bind (&Encoder::call_servers_list_changed, wp) - ); - } + weak_ptr 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 (); }