diff --git a/src/DNS_Mgr.cc b/src/DNS_Mgr.cc index 4edff2088c..c52e6086f4 100644 --- a/src/DNS_Mgr.cc +++ b/src/DNS_Mgr.cc @@ -1407,12 +1407,15 @@ void DNS_Mgr::DoProcess() if ( req->time + DNS_TIMEOUT > current_time() ) break; - if ( req->IsAddrReq() ) - CheckAsyncAddrRequest(req->host, true); - else if ( req->is_txt ) - CheckAsyncTextRequest(req->name.c_str(), true); - else - CheckAsyncHostRequest(req->name.c_str(), true); + if ( ! req->processed ) + { + if ( req->IsAddrReq() ) + CheckAsyncAddrRequest(req->host, true); + else if ( req->is_txt ) + CheckAsyncTextRequest(req->name.c_str(), true); + else + CheckAsyncHostRequest(req->name.c_str(), true); + } asyncs_timeouts.pop(); delete req; diff --git a/src/DNS_Mgr.h b/src/DNS_Mgr.h index 5aac420303..9f9fe4ccc3 100644 --- a/src/DNS_Mgr.h +++ b/src/DNS_Mgr.h @@ -172,12 +172,13 @@ protected: struct AsyncRequest { double time; + bool is_txt; + bool processed; IPAddr host; string name; - bool is_txt; CallbackList callbacks; - AsyncRequest() : time(0.0), is_txt(false) { } + AsyncRequest() : time(0.0), is_txt(false), processed(false) { } bool IsAddrReq() const { return name.length() == 0; } @@ -190,6 +191,7 @@ protected: delete *i; } callbacks.clear(); + processed = true; } void Resolved(TableVal* addrs) @@ -201,6 +203,7 @@ protected: delete *i; } callbacks.clear(); + processed = true; } void Timeout() @@ -212,6 +215,7 @@ protected: delete *i; } callbacks.clear(); + processed = true; } };