X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fencode_server.cc;h=16c65dba76f6df8d62c3546d9105fea6ea8662a2;hb=faa42e385ec2e36e75347ba5da1e4e0f69b6d6f3;hp=9902c8e84c65bf8d792700f6b2ce5594ea216c4d;hpb=ad1ef39eda58b3a919ea3b7084401a0439409ec6;p=dcpomatic.git diff --git a/src/lib/encode_server.cc b/src/lib/encode_server.cc index 9902c8e84..16c65dba7 100644 --- a/src/lib/encode_server.cc +++ b/src/lib/encode_server.cc @@ -97,9 +97,15 @@ EncodeServer::~EncodeServer () delete i; } - if (_broadcast.socket) { - _broadcast.socket->close (); + { + boost::mutex::scoped_lock lm (_broadcast.mutex); + if (_broadcast.socket) { + _broadcast.socket->close (); + delete _broadcast.socket; + _broadcast.socket = 0; + } } + _broadcast.io_service.stop (); if (_broadcast.thread) { /* Ideally this would be a DCPOMATIC_ASSERT(_broadcast.thread->joinable()) but we @@ -306,10 +312,13 @@ EncodeServer::broadcast_received () } } - _broadcast.socket->async_receive_from ( - boost::asio::buffer (_broadcast.buffer, sizeof (_broadcast.buffer)), - _broadcast.send_endpoint, boost::bind (&EncodeServer::broadcast_received, this) - ); + boost::mutex::scoped_lock lm (_broadcast.mutex); + if (_broadcast.socket) { + _broadcast.socket->async_receive_from ( + boost::asio::buffer (_broadcast.buffer, sizeof (_broadcast.buffer)), + _broadcast.send_endpoint, boost::bind (&EncodeServer::broadcast_received, this) + ); + } } void