bug 1438947 - avoid unnecessary timer cancels + clears r?valentin draft
authorDaniel Stenberg <daniel@haxx.se>
Sat, 17 Feb 2018 00:35:14 +0100
changeset 756429 46b192f494b845f8591dceaec472095324dda60e
parent 756422 c4d818c138689a66a397393fe1dd259ef0943b35
push id99488
push userbmo:daniel@haxx.se
push dateFri, 16 Feb 2018 23:50:15 +0000
reviewersvalentin
bugs1438947
milestone60.0a1
bug 1438947 - avoid unnecessary timer cancels + clears r?valentin To avoid race risk. MozReview-Commit-ID: 2h8xkmgjPP7
netwerk/dns/TRR.cpp
netwerk/dns/TRR.h
--- 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);