@@ -36,11 +36,11 @@ struct async_resolver : std::enable_shared_from_this<async_resolver<Tag> > {
3636typedef std::function<void (resolver_type &, string_type, std::uint16_t ,
3737 resolve_completion_function)> resolve_function;
3838
39- void clear_resolved_cache () { clear_cache_ = true ; }
39+ void clear_resolved_cache () { clear_cache_. store ( true ) ; }
4040
4141protected:
4242bool cache_resolved_;
43- bool clear_cache_;
43+ std::atomic< bool > clear_cache_;
4444 endpoint_cache endpoint_cache_;
4545 std::shared_ptr<boost::asio::io_service> service_;
4646 std::shared_ptr<boost::asio::io_service::strand> resolver_strand_;
@@ -50,7 +50,7 @@ struct async_resolver : std::enable_shared_from_this<async_resolver<Tag> > {
5050
5151void resolve (resolver_type &resolver_, string_typeconst &host,
5252 std::uint16_t port, resolve_completion_function once_resolved) {
53- if (cache_resolved_ && !clear_cache_) {
53+ if (cache_resolved_ && !clear_cache_. load () ) {
5454typename endpoint_cache::iterator iter =
5555 endpoint_cache_.find (boost::to_lower_copy (host));
5656if (iter != endpoint_cache_.end ()) {
@@ -77,8 +77,7 @@ struct async_resolver : std::enable_shared_from_this<async_resolver<Tag> > {
7777typename endpoint_cache::iterator iter;
7878bool inserted =false ;
7979if (!ec && cache_resolved_) {
80- if (clear_cache_) {
81- clear_cache_ =false ;
80+ if (clear_cache_.exchange (false )) {
8281 endpoint_cache_.clear ();
8382 }
8483std::tie (iter, inserted) = endpoint_cache_.insert (std::make_pair (