Bug 1474296: Don't disconnect disconnected channels on IPC error. r?mixedpuppy draft
authorKris Maglione <maglione.k@gmail.com>
Wed, 25 Jul 2018 11:20:38 -0700
changeset 822688 2c5f2b43efe2c0582075b6cf9ab101e5dfa82a27
parent 822678 996ea769af24ec3997585abb4cc410ee898e36c1
child 822693 35319dc135b3cffef9fde02ca23ef4548c4fea24
push id117447
push usermaglione.k@gmail.com
push dateWed, 25 Jul 2018 18:21:25 +0000
reviewersmixedpuppy
bugs1474296
milestone63.0a1
Bug 1474296: Don't disconnect disconnected channels on IPC error. r?mixedpuppy This is mostly a guess at the cause of the problem, but I can't see any other way for us to multiply call OnDataAvailable in parallel during normal disconnection. MozReview-Commit-ID: KZyhbDCrLR4
toolkit/components/extensions/webrequest/StreamFilterParent.cpp
--- a/toolkit/components/extensions/webrequest/StreamFilterParent.cpp
+++ b/toolkit/components/extensions/webrequest/StreamFilterParent.cpp
@@ -216,19 +216,31 @@ StreamFilterParent::CheckListenerChain()
  * Error handling
  *****************************************************************************/
 
 void
 StreamFilterParent::Broken()
 {
   AssertIsActorThread();
 
-  mState = State::Disconnecting;
+  switch (mState) {
+  case State::Initialized:
+  case State::TransferringData:
+  case State::Suspended:
+    mState = State::Disconnecting;
+    if (mChannel) {
+      mChannel->Cancel(NS_ERROR_FAILURE);
+    }
 
-  FinishDisconnect();
+    FinishDisconnect();
+    break;
+
+  default:
+    break;
+  }
 }
 
 /*****************************************************************************
  * State change requests
  *****************************************************************************/
 
 IPCResult
 StreamFilterParent::RecvClose()