Just stop the threads and clear the server list when
stop() is called.
2016-07-20 Carl Hetherington <cth@carlh.net>
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>
* Try to fix intermittent hangs with encoding servers.
2016-07-14 Carl Hetherington <cth@carlh.net>
EncodeServerFinder* EncodeServerFinder::_instance = 0;
EncodeServerFinder::EncodeServerFinder ()
EncodeServerFinder* EncodeServerFinder::_instance = 0;
EncodeServerFinder::EncodeServerFinder ()
- : _disabled (false)
- , _search_thread (0)
, _listen_thread (0)
, _stop (false)
{
, _listen_thread (0)
, _stop (false)
{
_listen_thread = new boost::thread (boost::bind (&EncodeServerFinder::listen_thread, this));
}
_listen_thread = new boost::thread (boost::bind (&EncodeServerFinder::listen_thread, this));
}
EncodeServerFinder::~EncodeServerFinder ()
EncodeServerFinder::~EncodeServerFinder ()
+{
+ stop ();
+}
+
+void
+EncodeServerFinder::stop ()
_search_thread->join ();
}
}
_search_thread->join ();
}
}
+ delete _search_thread;
+ _search_thread = 0;
_listen_io_service.stop ();
if (_listen_thread) {
_listen_io_service.stop ();
if (_listen_thread) {
_listen_thread->join ();
}
}
_listen_thread->join ();
}
}
+ delete _listen_thread;
+ _listen_thread = 0;
+
+ boost::mutex::scoped_lock lm (_servers_mutex);
+ _servers.clear ();
static EncodeServerFinder* instance ();
static void drop ();
static EncodeServerFinder* instance ();
static void drop ();
- void disable () {
- _disabled = true;
- }
-
- bool disabled () const {
- return _disabled;
- }
std::list<EncodeServerDescription> servers () const;
std::list<EncodeServerDescription> servers () const;
void config_changed (Config::Property what);
void config_changed (Config::Property what);
/** Thread to periodically issue broadcasts and requests to find encoding servers */
boost::thread* _search_thread;
/** Thread to listen to the responses from servers */
/** Thread to periodically issue broadcasts and requests to find encoding servers */
boost::thread* _search_thread;
/** Thread to listen to the responses from servers */
- 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
}
/* We don't want the servers-list-changed callback trying to do things
signal_manager = new SignalManager ();
if (no_remote) {
signal_manager = new SignalManager ();
if (no_remote) {
- EncodeServerFinder::instance()->disable ();
+ EncodeServerFinder::instance()->stop ();
Config::instance()->set_default_j2k_bandwidth (100000000);
Config::instance()->set_log_types (LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR);
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 ();
}
signal_manager = new TestSignalManager ();
}