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
}
}
- _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
{
boost::mutex::scoped_lock lock (_mutex);
+ Waker waker;
+ waker.nudge ();
+
/* Wait until the queue has gone down a bit */
while (_queue.size() >= _worker_threads.size() * 2 && !_terminate) {
_full_condition.wait (lock);