From f3b7fcb560be30b0bce2bea440fb6d0a947b444f Mon Sep 17 00:00:00 2001 From: roytam1 Date: Fri, 24 Apr 2026 10:22:58 +0800 Subject: [PATCH] import from UXP: [network] Hold strong ref in `nsSyncStreamListener::Available`. (68fd6722) --- netwerk/base/nsSyncStreamListener.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/netwerk/base/nsSyncStreamListener.cpp b/netwerk/base/nsSyncStreamListener.cpp index e80e885c5..86901aa62 100644 --- a/netwerk/base/nsSyncStreamListener.cpp +++ b/netwerk/base/nsSyncStreamListener.cpp @@ -122,16 +122,22 @@ nsSyncStreamListener::Close() NS_IMETHODIMP nsSyncStreamListener::Available(uint64_t *result) { - if (NS_FAILED(mStatus)) - return mStatus; + // Nested event loop can run code that drops the last external reference. + RefPtr self(this); - mStatus = mPipeIn->Available(result); - if (NS_SUCCEEDED(mStatus) && (*result == 0) && !mDone) { - mStatus = WaitForData(); - if (NS_SUCCEEDED(mStatus)) - mStatus = mPipeIn->Available(result); - } + if (NS_FAILED(mStatus)) { return mStatus; + } + + mStatus = mPipeIn->Available(result); + if (NS_SUCCEEDED(mStatus) && (*result == 0) && !mDone) { + mStatus = WaitForData(); + if (NS_SUCCEEDED(mStatus)) { + mStatus = mPipeIn->Available(result); + } + } + + return mStatus; } NS_IMETHODIMP