- boost::system::error_code error;
- boost::asio::io_service io_service;
- boost::asio::ip::udp::socket socket (io_service);
- socket.open (boost::asio::ip::udp::v4(), error);
- if (error) {
- throw NetworkError ("failed to set up broadcast socket");
- }
-
- socket.set_option (boost::asio::ip::udp::socket::reuse_address (true));
- socket.set_option (boost::asio::socket_base::broadcast (true));
-
- boost::asio::ip::udp::endpoint end_point (boost::asio::ip::address_v4::broadcast(), Config::instance()->server_port_base() + 1);
-
- while (1) {
- boost::mutex::scoped_lock lm (_mutex);
- if (_terminate) {
- socket.close (error);
- return;
- }
-
- string data = DCPOMATIC_HELLO;
- socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
-
- lm.unlock ();
- dcpomatic_sleep (10);
- }
+ store_current ();
+ /* Wake anything waiting on _full_condition so it can see the exception */
+ _full_condition.notify_all ();