author | Dragana Damjanovic <dd.mozilla@gmail.com> |
Tue, 03 Feb 2015 00:16:00 -0500 | |
changeset 227257 | fe36fa405fc2 |
parent 227256 | 6105b754be10 |
child 227258 | d220925b1467 |
push id | 28225 |
push user | ryanvm@gmail.com |
push date | Tue, 03 Feb 2015 21:15:47 +0000 |
treeherder | mozilla-central@0c2f7434c325 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | sworkman |
bugs | 1123324 |
milestone | 38.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
netwerk/dns/nsHostResolver.cpp | file | annotate | diff | comparison | revisions | |
netwerk/dns/nsHostResolver.h | file | annotate | diff | comparison | revisions |
--- a/netwerk/dns/nsHostResolver.cpp +++ b/netwerk/dns/nsHostResolver.cpp @@ -204,16 +204,24 @@ nsHostRecord::Create(const nsHostKey *ke void nsHostRecord::SetExpiration(const mozilla::TimeStamp& now, unsigned int valid, unsigned int grace) { mValidStart = now; mGraceStart = now + TimeDuration::FromSeconds(valid); mValidEnd = now + TimeDuration::FromSeconds(valid + grace); } +void +nsHostRecord::CopyExpirationTimesFrom(const nsHostRecord *aFromHostRecord) +{ + mValidStart = aFromHostRecord->mValidStart; + mValidEnd = aFromHostRecord->mValidEnd; + mGraceStart = aFromHostRecord->mGraceStart; +} + nsHostRecord::~nsHostRecord() { Telemetry::Accumulate(Telemetry::DNS_BLACKLIST_COUNT, mBlacklistedCount); delete addr_info; delete addr; } bool @@ -840,29 +848,31 @@ nsHostResolver::ResolveHost(const char "Entry should be resolved or negative."); LOG((" Trying AF_UNSPEC entry for [%s] af: %s.\n", host, (af == PR_AF_INET) ? "AF_INET" : "AF_INET6")); he->rec->addr_info = nullptr; if (unspecHe->rec->negative) { he->rec->negative = unspecHe->rec->negative; + he->rec->CopyExpirationTimesFrom(unspecHe->rec); } else if (unspecHe->rec->addr_info) { // Search for any valid address in the AF_UNSPEC entry // in the cache (not blacklisted and from the right // family). NetAddrElement *addrIter = unspecHe->rec->addr_info->mAddresses.getFirst(); while (addrIter) { if ((af == addrIter->mAddress.inet.family) && !unspecHe->rec->Blacklisted(&addrIter->mAddress)) { if (!he->rec->addr_info) { he->rec->addr_info = new AddrInfo( unspecHe->rec->addr_info->mHostName, unspecHe->rec->addr_info->mCanonicalName); + he->rec->CopyExpirationTimesFrom(unspecHe->rec); } he->rec->addr_info->AddAddress( new NetAddrElement(*addrIter)); } addrIter = addrIter->getNext(); } } if (he->rec->HasUsableResult(TimeStamp::NowLoRes(), flags)) {
--- a/netwerk/dns/nsHostResolver.h +++ b/netwerk/dns/nsHostResolver.h @@ -96,16 +96,17 @@ public: // If a record is in its grace period (and not expired), it will be used // but a request to refresh it will be made. mozilla::TimeStamp mGraceStart; // Convenience function for setting the timestamps above (mValidStart, // mValidEnd, and mGraceStart). valid and grace are durations in seconds. void SetExpiration(const mozilla::TimeStamp& now, unsigned int valid, unsigned int grace); + void CopyExpirationTimesFrom(const nsHostRecord *aFromHostRecord); // Checks if the record is usable (not expired and has a value) bool HasUsableResult(const mozilla::TimeStamp& now, uint16_t queryFlags = 0) const; // hold addr_info_lock when calling the blacklist functions bool Blacklisted(mozilla::net::NetAddr *query); void ResetBlacklist(); void ReportUnusable(mozilla::net::NetAddr *addr);