summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-07-06 14:06:25 +0100
committerCarl Hetherington <cth@carlh.net>2015-07-06 14:06:25 +0100
commit96a2b6f7ce0be67248cbc612e2ef03ea7d586039 (patch)
tree09ef052f6d21eb139e2490f3680895509aaa6205
parenta6e7017b36ea2cee9f95c45fc0a4f85294dbc16f (diff)
Search for servers immediately when configuration changes.
-rw-r--r--src/lib/server_finder.cc16
-rw-r--r--src/lib/server_finder.h4
2 files changed, 14 insertions, 6 deletions
diff --git a/src/lib/server_finder.cc b/src/lib/server_finder.cc
index ecda385eb..3eec6597b 100644
--- a/src/lib/server_finder.cc
+++ b/src/lib/server_finder.cc
@@ -54,7 +54,7 @@ ServerFinder::~ServerFinder ()
{
_stop = true;
- _search_thread->interrupt ();
+ _search_condition.notify_all ();
_search_thread->join ();
_listen_io_service.stop ();
@@ -106,11 +106,8 @@ try
}
}
- 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 (...)
@@ -224,5 +221,12 @@ ServerFinder::config_changed (Config::Property what)
_servers.clear ();
}
ServersListChanged ();
+ search_now ();
}
}
+
+void
+ServerFinder::search_now ()
+{
+ _search_condition.notify_all ();
+}
diff --git a/src/lib/server_finder.h b/src/lib/server_finder.h
index 22f44eeb8..3bb0e03f9 100644
--- a/src/lib/server_finder.h
+++ b/src/lib/server_finder.h
@@ -53,6 +53,7 @@ private:
void handle_accept (boost::system::error_code ec, boost::shared_ptr<Socket> socket);
void config_changed (Config::Property what);
+ void search_now ();
bool _disabled;
@@ -68,5 +69,8 @@ private:
boost::shared_ptr<boost::asio::ip::tcp::acceptor> _listen_acceptor;
bool _stop;
+ boost::condition _search_condition;
+ boost::mutex _search_condition_mutex;
+
static ServerFinder* _instance;
};