summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-03-11 18:09:22 +0000
committerCarl Hetherington <cth@carlh.net>2019-03-11 18:09:22 +0000
commitb042118121a27027b94d380ea4788e03ed1a9944 (patch)
tree0648ebcf78045fe8ddc8e33e4b84df4e73d5eb29 /src
parent19d8aa3e21b74e576894a807d518b4cc23c1921f (diff)
Protect _broadcast.socket from simultaneous access.
Diffstat (limited to 'src')
-rw-r--r--src/lib/encode_server.cc11
-rw-r--r--src/lib/encode_server.h1
2 files changed, 10 insertions, 2 deletions
diff --git a/src/lib/encode_server.cc b/src/lib/encode_server.cc
index 9902c8e84..d31760c0d 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,6 +312,7 @@ EncodeServer::broadcast_received ()
}
}
+ boost::mutex::scoped_lock lm (_broadcast.mutex);
_broadcast.socket->async_receive_from (
boost::asio::buffer (_broadcast.buffer, sizeof (_broadcast.buffer)),
_broadcast.send_endpoint, boost::bind (&EncodeServer::broadcast_received, this)
diff --git a/src/lib/encode_server.h b/src/lib/encode_server.h
index c9bd55718..14dc77398 100644
--- a/src/lib/encode_server.h
+++ b/src/lib/encode_server.h
@@ -68,6 +68,7 @@ private:
, socket (0)
{}
+ boost::mutex mutex;
boost::thread* thread;
boost::asio::ip::udp::socket* socket;
char buffer[64];