bug 1438947 - avoid unnecessary timer cancels + clears r?valentin
To avoid race risk.
MozReview-Commit-ID: 2h8xkmgjPP7
--- a/netwerk/dns/TRR.cpp
+++ b/netwerk/dns/TRR.cpp
@@ -819,40 +819,32 @@ TRR::ReturnData()
ttl = item->mTtl;
}
}
ai->ttl = ttl;
if (!mHostResolver) {
return NS_ERROR_FAILURE;
}
(void)mHostResolver->CompleteLookup(mRec, NS_OK, ai.forget(), mPB);
- if (mTimeout) {
- mTimeout->Cancel();
- mTimeout = nullptr;
- }
mHostResolver = nullptr;
mRec = nullptr;
return NS_OK;
}
nsresult
TRR::FailData()
{
if (!mHostResolver) {
return NS_ERROR_FAILURE;
}
// create and populate an TRR AddrInfo instance to pass on to signal that
// this comes from TRR
AddrInfo *ai = new AddrInfo(mHost.get(), mType);
(void)mHostResolver->CompleteLookup(mRec, NS_ERROR_FAILURE, ai, mPB);
- if (mTimeout) {
- mTimeout->Cancel();
- mTimeout = nullptr;
- }
mHostResolver = nullptr;
mRec = nullptr;
return NS_OK;
}
nsresult
TRR::On200Response()
{
@@ -1027,20 +1019,16 @@ TRR::Cancel()
{
if (!NS_IsMainThread()) {
NS_DispatchToMainThread(new ProxyCancel(this));
return;
}
if (mChannel) {
LOG(("TRR: %p canceling Channel %p %s %d\n", this,
mChannel.get(), mHost.get(), mType));
- if (mTimeout) {
- mTimeout->Cancel();
- mTimeout = nullptr;
- }
mChannel->Cancel(NS_ERROR_ABORT);
}
}
#undef LOG
// namespace
}
--- a/netwerk/dns/TRR.h
+++ b/netwerk/dns/TRR.h
@@ -135,17 +135,17 @@ public:
void Cancel();
enum TrrType Type() { return mType; }
nsCString mHost;
RefPtr<nsHostRecord> mRec;
RefPtr<AHostResolver> mHostResolver;
TRRService *mTRRService;
private:
- ~TRR() { if (mTimeout) { mTimeout->Cancel(); } };
+ ~TRR() = default;
nsresult SendHTTPRequest();
nsresult DohEncode(nsCString &target);
nsresult DohDecode();
nsresult ReturnData();
nsresult FailData();
nsresult DohDecodeQuery(const nsCString &query,
nsCString &host, enum TrrType &type);
nsresult ReceivePush(nsIHttpChannel *pushed, nsHostRecord *pushedRec);