projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Assert that reel assets are all the same length.
[dcpomatic.git]
/
src
/
lib
/
encode_server_finder.cc
diff --git
a/src/lib/encode_server_finder.cc
b/src/lib/encode_server_finder.cc
index 7491d9ef7cc3d578ffd7ecbd8be7e80d87c7fb70..2796df8f55e85417b37478e1d8dcf860245d3c68 100644
(file)
--- a/
src/lib/encode_server_finder.cc
+++ b/
src/lib/encode_server_finder.cc
@@
-25,7
+25,7
@@
#include "cross.h"
#include "encode_server_description.h"
#include "dcpomatic_socket.h"
#include "cross.h"
#include "encode_server_description.h"
#include "dcpomatic_socket.h"
-#include
"raw_convert.h"
+#include
<dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <libcxml/cxml.h>
#include <boost/lambda/lambda.hpp>
#include <iostream>
@@
-39,12
+39,12
@@
using std::cout;
using boost::shared_ptr;
using boost::scoped_array;
using boost::weak_ptr;
using boost::shared_ptr;
using boost::scoped_array;
using boost::weak_ptr;
+using dcp::raw_convert;
EncodeServerFinder* EncodeServerFinder::_instance = 0;
EncodeServerFinder::EncodeServerFinder ()
EncodeServerFinder* EncodeServerFinder::_instance = 0;
EncodeServerFinder::EncodeServerFinder ()
- : _disabled (false)
- , _search_thread (0)
+ : _search_thread (0)
, _listen_thread (0)
, _stop (false)
{
, _listen_thread (0)
, _stop (false)
{
@@
-58,21
+58,43
@@
EncodeServerFinder::start ()
_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 ()
{
_stop = true;
_search_condition.notify_all ();
if (_search_thread) {
{
_stop = true;
_search_condition.notify_all ();
if (_search_thread) {
- DCPOMATIC_ASSERT (_search_thread->joinable ());
- _search_thread->join ();
+ /* Ideally this would be a DCPOMATIC_ASSERT(_search_thread->joinable()) but we
+ can't throw exceptions from a destructor.
+ */
+ if (_search_thread->joinable ()) {
+ _search_thread->join ();
+ }
}
}
+ delete _search_thread;
+ _search_thread = 0;
_listen_io_service.stop ();
if (_listen_thread) {
_listen_io_service.stop ();
if (_listen_thread) {
- DCPOMATIC_ASSERT (_listen_thread->joinable ());
- _listen_thread->join ();
+ /* Ideally this would be a DCPOMATIC_ASSERT(_listen_thread->joinable()) but we
+ can't throw exceptions from a destructor.
+ */
+ if (_listen_thread->joinable ()) {
+ _listen_thread->join ();
+ }
}
}
+ delete _listen_thread;
+ _listen_thread = 0;
+
+ boost::mutex::scoped_lock lm (_servers_mutex);
+ _servers.clear ();
}
void
}
void
@@
-96,7
+118,7
@@
try
if (Config::instance()->use_any_servers ()) {
/* Broadcast to look for servers */
try {
if (Config::instance()->use_any_servers ()) {
/* Broadcast to look for servers */
try {
- boost::asio::ip::udp::endpoint end_point (boost::asio::ip::address_v4::broadcast(),
Config::instance()->server_port_base() + 1
);
+ boost::asio::ip::udp::endpoint end_point (boost::asio::ip::address_v4::broadcast(),
HELLO_PORT
);
socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
} catch (...) {
socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
} catch (...) {
@@
-112,7
+134,7
@@
try
}
try {
boost::asio::ip::udp::resolver resolver (io_service);
}
try {
boost::asio::ip::udp::resolver resolver (io_service);
- boost::asio::ip::udp::resolver::query query (*i, raw_convert<string> (
Config::instance()->server_port_base() + 1
));
+ boost::asio::ip::udp::resolver::query query (*i, raw_convert<string> (
HELLO_PORT
));
boost::asio::ip::udp::endpoint end_point (*resolver.resolve (query));
socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
} catch (...) {
boost::asio::ip::udp::endpoint end_point (*resolver.resolve (query));
socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
} catch (...) {
@@
-135,7
+157,7
@@
try {
using namespace boost::asio::ip;
try {
using namespace boost::asio::ip;
try {
- _listen_acceptor.reset (new tcp::acceptor (_listen_io_service, tcp::endpoint (tcp::v4(),
Config::instance()->server_port_base() + 1
)));
+ _listen_acceptor.reset (new tcp::acceptor (_listen_io_service, tcp::endpoint (tcp::v4(),
SERVER_PRESENCE_PORT
)));
} catch (...) {
boost::throw_exception (NetworkError (_("Could not listen for remote encode servers. Perhaps another instance of DCP-o-matic is running.")));
}
} catch (...) {
boost::throw_exception (NetworkError (_("Could not listen for remote encode servers. Perhaps another instance of DCP-o-matic is running.")));
}