projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix a couple more crashes with incorrect KDMs (#1000).
[dcpomatic.git]
/
src
/
lib
/
encode_server.cc
diff --git
a/src/lib/encode_server.cc
b/src/lib/encode_server.cc
index f318da03b5c2878dc5be5f3d30e74244ebcdf57e..7bef82b2658c6b0b0e973b70b2e778593a7ed834 100644
(file)
--- a/
src/lib/encode_server.cc
+++ b/
src/lib/encode_server.cc
@@
-1,5
+1,5
@@
/*
/*
- Copyright (C) 2012-201
5
Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-201
8
Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
This file is part of DCP-o-matic.
@@
-31,11
+31,11
@@
#include "config.h"
#include "cross.h"
#include "player_video.h"
#include "config.h"
#include "cross.h"
#include "player_video.h"
-#include "safe_stringstream.h"
-#include "raw_convert.h"
#include "compose.hpp"
#include "log.h"
#include "encoded_log_entry.h"
#include "compose.hpp"
#include "log.h"
#include "encoded_log_entry.h"
+#include "version.h"
+#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
#include <boost/algorithm/string.hpp>
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
#include <boost/algorithm/string.hpp>
@@
-65,9
+65,10
@@
using boost::scoped_array;
using boost::optional;
using dcp::Size;
using dcp::Data;
using boost::optional;
using dcp::Size;
using dcp::Data;
+using dcp::raw_convert;
EncodeServer::EncodeServer (shared_ptr<Log> log, bool verbose, int num_threads)
EncodeServer::EncodeServer (shared_ptr<Log> log, bool verbose, int num_threads)
- : Server (
Config::instance()->server_port_base()
)
+ : Server (
ENCODE_FRAME_PORT
)
, _log (log)
, _verbose (verbose)
, _num_threads (num_threads)
, _log (log)
, _verbose (verbose)
, _num_threads (num_threads)
@@
-85,15
+86,27
@@
EncodeServer::~EncodeServer ()
}
BOOST_FOREACH (boost::thread* i, _worker_threads) {
}
BOOST_FOREACH (boost::thread* i, _worker_threads) {
- DCPOMATIC_ASSERT (i->joinable ());
- i->join ();
+ /* Ideally this would be a DCPOMATIC_ASSERT(i->joinable()) but we
+ can't throw exceptions from a destructor.
+ */
+ if (i->joinable ()) {
+ i->join ();
+ }
delete i;
}
delete i;
}
+ if (_broadcast.socket) {
+ _broadcast.socket->close ();
+ }
_broadcast.io_service.stop ();
if (_broadcast.thread) {
_broadcast.io_service.stop ();
if (_broadcast.thread) {
- DCPOMATIC_ASSERT (_broadcast.thread->joinable ());
- _broadcast.thread->join ();
+ /* Ideally this would be a DCPOMATIC_ASSERT(_broadcast.thread->joinable()) but we
+ can't throw exceptions from a destructor.
+ */
+ if (_broadcast.thread->joinable ()) {
+ _broadcast.thread->join ();
+ }
+ delete _broadcast.thread;
}
}
}
}
@@
-210,7
+223,7
@@
EncodeServer::worker_thread ()
void
EncodeServer::run ()
{
void
EncodeServer::run ()
{
- LOG_GENERAL ("Server
starting with %1 threads"
, _num_threads);
+ LOG_GENERAL ("Server
%1 (%2) starting with %3 threads", dcpomatic_version, dcpomatic_git_commit
, _num_threads);
if (_verbose) {
cout << "DCP-o-matic server starting with " << _num_threads << " threads.\n";
}
if (_verbose) {
cout << "DCP-o-matic server starting with " << _num_threads << " threads.\n";
}
@@
-229,7
+242,7
@@
EncodeServer::broadcast_thread ()
try
{
boost::asio::ip::address address = boost::asio::ip::address_v4::any ();
try
{
boost::asio::ip::address address = boost::asio::ip::address_v4::any ();
- boost::asio::ip::udp::endpoint listen_endpoint (address,
Config::instance()->server_port_base() + 1
);
+ boost::asio::ip::udp::endpoint listen_endpoint (address,
HELLO_PORT
);
_broadcast.socket = new boost::asio::ip::udp::socket (_broadcast.io_service);
_broadcast.socket->open (listen_endpoint.protocol ());
_broadcast.socket = new boost::asio::ip::udp::socket (_broadcast.io_service);
_broadcast.socket->open (listen_endpoint.protocol ());
@@
-266,7
+279,7
@@
EncodeServer::broadcast_received ()
}
shared_ptr<Socket> socket (new Socket);
try {
}
shared_ptr<Socket> socket (new Socket);
try {
- socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(),
Config::instance()->server_port_base() + 1
));
+ socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(),
SERVER_PRESENCE_PORT
));
socket->write (xml.length() + 1);
socket->write ((uint8_t *) xml.c_str(), xml.length() + 1);
} catch (...) {
socket->write (xml.length() + 1);
socket->write ((uint8_t *) xml.c_str(), xml.length() + 1);
} catch (...) {