Loading dns_responder/dns_responder.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -723,6 +723,13 @@ void DNSResponder::requestHandler() { size_t response_len = sizeof(response); if (handleDNSRequest(buffer, len, response, &response_len) && response_len > 0) { // place wait_for after handleDNSRequest() so we can check the number of queries in // test case before it got responded. std::unique_lock guard(cv_mutex_for_deferred_resp_); cv_for_deferred_resp_.wait(guard, [this]() REQUIRES(cv_mutex_for_deferred_resp_) { return !deferred_resp_; }); len = sendto(socket_, response, response_len, 0, reinterpret_cast<const sockaddr*>(&sa), sa_len); std::string host_str = Loading Loading @@ -916,4 +923,12 @@ bool DNSResponder::makeErrorResponse(DNSHeader* header, ns_rcode rcode, return true; } void DNSResponder::setDeferredResp(bool deferred_resp) { std::lock_guard<std::mutex> guard(cv_mutex_for_deferred_resp_); deferred_resp_ = deferred_resp; if (!deferred_resp_) { cv_for_deferred_resp_.notify_one(); } } } // namespace test dns_responder/dns_responder.h +5 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ class DNSResponder { void clearQueries(); std::condition_variable& getCv() { return cv; } std::mutex& getCvMutex() { return cv_mutex_; } void setDeferredResp(bool deferred_resp); private: // Key used for accessing mappings. Loading Loading @@ -159,6 +160,10 @@ class DNSResponder { std::mutex update_mutex_; std::condition_variable cv; std::mutex cv_mutex_; std::condition_variable cv_for_deferred_resp_; std::mutex cv_mutex_for_deferred_resp_; bool deferred_resp_ GUARDED_BY(cv_mutex_for_deferred_resp_) = false; }; } // namespace test Loading include/netd_resolv/resolv_stub.h +2 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,8 @@ extern struct ResolvStub { int (*android_net_res_stats_get_info_for_net)(unsigned netid, int* nscount, sockaddr_storage servers[MAXNS], int* dcount, char domains[MAXDNSRCH][MAXDNSRCHPATH], __res_params* params, res_stats stats[MAXNS]); __res_params* params, res_stats stats[MAXNS], int* wait_for_pending_req_timeout_count); void (*android_net_res_stats_get_usable_servers)(const __res_params* params, res_stats stats[], int nscount, bool valid_servers[]); Loading include/netd_resolv/stats.h +2 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,8 @@ LIBNETD_RESOLV_PUBLIC void android_net_res_stats_aggregate(res_stats* stats, int LIBNETD_RESOLV_PUBLIC int android_net_res_stats_get_info_for_net( unsigned netid, int* nscount, sockaddr_storage servers[MAXNS], int* dcount, char domains[MAXDNSRCH][MAXDNSRCHPATH], __res_params* params, res_stats stats[MAXNS]); char domains[MAXDNSRCH][MAXDNSRCHPATH], __res_params* params, res_stats stats[MAXNS], int* wait_for_pending_req_timeout_count); // Returns an array of bools indicating which servers are considered good LIBNETD_RESOLV_PUBLIC void android_net_res_stats_get_usable_servers(const __res_params* params, Loading res_cache.cpp +127 −169 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
dns_responder/dns_responder.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -723,6 +723,13 @@ void DNSResponder::requestHandler() { size_t response_len = sizeof(response); if (handleDNSRequest(buffer, len, response, &response_len) && response_len > 0) { // place wait_for after handleDNSRequest() so we can check the number of queries in // test case before it got responded. std::unique_lock guard(cv_mutex_for_deferred_resp_); cv_for_deferred_resp_.wait(guard, [this]() REQUIRES(cv_mutex_for_deferred_resp_) { return !deferred_resp_; }); len = sendto(socket_, response, response_len, 0, reinterpret_cast<const sockaddr*>(&sa), sa_len); std::string host_str = Loading Loading @@ -916,4 +923,12 @@ bool DNSResponder::makeErrorResponse(DNSHeader* header, ns_rcode rcode, return true; } void DNSResponder::setDeferredResp(bool deferred_resp) { std::lock_guard<std::mutex> guard(cv_mutex_for_deferred_resp_); deferred_resp_ = deferred_resp; if (!deferred_resp_) { cv_for_deferred_resp_.notify_one(); } } } // namespace test
dns_responder/dns_responder.h +5 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,7 @@ class DNSResponder { void clearQueries(); std::condition_variable& getCv() { return cv; } std::mutex& getCvMutex() { return cv_mutex_; } void setDeferredResp(bool deferred_resp); private: // Key used for accessing mappings. Loading Loading @@ -159,6 +160,10 @@ class DNSResponder { std::mutex update_mutex_; std::condition_variable cv; std::mutex cv_mutex_; std::condition_variable cv_for_deferred_resp_; std::mutex cv_mutex_for_deferred_resp_; bool deferred_resp_ GUARDED_BY(cv_mutex_for_deferred_resp_) = false; }; } // namespace test Loading
include/netd_resolv/resolv_stub.h +2 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,8 @@ extern struct ResolvStub { int (*android_net_res_stats_get_info_for_net)(unsigned netid, int* nscount, sockaddr_storage servers[MAXNS], int* dcount, char domains[MAXDNSRCH][MAXDNSRCHPATH], __res_params* params, res_stats stats[MAXNS]); __res_params* params, res_stats stats[MAXNS], int* wait_for_pending_req_timeout_count); void (*android_net_res_stats_get_usable_servers)(const __res_params* params, res_stats stats[], int nscount, bool valid_servers[]); Loading
include/netd_resolv/stats.h +2 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,8 @@ LIBNETD_RESOLV_PUBLIC void android_net_res_stats_aggregate(res_stats* stats, int LIBNETD_RESOLV_PUBLIC int android_net_res_stats_get_info_for_net( unsigned netid, int* nscount, sockaddr_storage servers[MAXNS], int* dcount, char domains[MAXDNSRCH][MAXDNSRCHPATH], __res_params* params, res_stats stats[MAXNS]); char domains[MAXDNSRCH][MAXDNSRCHPATH], __res_params* params, res_stats stats[MAXNS], int* wait_for_pending_req_timeout_count); // Returns an array of bools indicating which servers are considered good LIBNETD_RESOLV_PUBLIC void android_net_res_stats_get_usable_servers(const __res_params* params, Loading