ServerFinder::ServerFinder ()
: _disabled (false)
- , _broadcast_thread (0)
+ , _search_thread (0)
, _listen_thread (0)
, _stop (false)
{
- _broadcast_thread = new boost::thread (boost::bind (&ServerFinder::broadcast_thread, this));
+ _search_thread = new boost::thread (boost::bind (&ServerFinder::search_thread, this));
_listen_thread = new boost::thread (boost::bind (&ServerFinder::listen_thread, this));
Config::instance()->Changed.connect (boost::bind (&ServerFinder::config_changed, this, _1));
}
{
_stop = true;
- _broadcast_thread->interrupt ();
- _broadcast_thread->join ();
+ _search_condition.notify_all ();
+ _search_thread->join ();
_listen_io_service.stop ();
_listen_thread->join ();
}
void
-ServerFinder::broadcast_thread ()
+ServerFinder::search_thread ()
try
{
boost::system::error_code error;
}
}
- try {
- boost::thread::sleep (boost::get_system_time() + boost::posix_time::seconds (10));
- } catch (boost::thread_interrupted& e) {
- return;
- }
+ boost::mutex::scoped_lock lm (_search_condition_mutex);
+ _search_condition.timed_wait (lm, boost::get_system_time() + boost::posix_time::seconds (10));
}
}
catch (...)
_servers.clear ();
}
ServersListChanged ();
+ search_now ();
}
}
+
+void
+ServerFinder::search_now ()
+{
+ _search_condition.notify_all ();
+}