| Index: Source/core/streams/ReadableStreamImpl.h
|
| diff --git a/Source/core/streams/ReadableStreamImpl.h b/Source/core/streams/ReadableStreamImpl.h
|
| index 719fe8e040a940fe2c8cb9456434f1bfc9b3cee0..27ee8ce5de6082de5f5ac03a844e1ce77a46e360 100644
|
| --- a/Source/core/streams/ReadableStreamImpl.h
|
| +++ b/Source/core/streams/ReadableStreamImpl.h
|
| @@ -118,18 +118,12 @@ public:
|
| DEFINE_INLINE_VIRTUAL_TRACE()
|
| {
|
| visitor->trace(m_strategy);
|
| -#if ENABLE(OILPAN)
|
| visitor->trace(m_pendingReads);
|
| -#endif
|
| ReadableStream::trace(visitor);
|
| }
|
|
|
| private:
|
| -#if ENABLE(OILPAN)
|
| using PendingReads = HeapDeque<Member<ScriptPromiseResolver>>;
|
| -#else
|
| - using PendingReads = Deque<RefPtr<ScriptPromiseResolver>>;
|
| -#endif
|
|
|
| // ReadableStream methods
|
| bool isQueueEmpty() const override { return m_queue.isEmpty(); }
|
| @@ -142,8 +136,11 @@ private:
|
| void resolveAllPendingReadsAsDone() override
|
| {
|
| for (auto& resolver : m_pendingReads) {
|
| - ScriptState::Scope scope(resolver->scriptState());
|
| - resolver->resolve(v8IteratorResultDone(resolver->scriptState()));
|
| + ScriptState* scriptState = resolver->scriptState();
|
| + if (!scriptState->contextIsValid())
|
| + continue;
|
| + ScriptState::Scope scope(scriptState);
|
| + resolver->resolve(v8IteratorResultDone(scriptState));
|
| }
|
| m_pendingReads.clear();
|
| }
|
| @@ -180,8 +177,10 @@ bool ReadableStreamImpl<ChunkTypeTraits>::enqueue(typename ChunkTypeTraits::Pass
|
| return enqueuePostAction();
|
| }
|
|
|
| - RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = m_pendingReads.takeFirst();
|
| + ScriptPromiseResolver* resolver = m_pendingReads.takeFirst();
|
| ScriptState* scriptState = resolver->scriptState();
|
| + if (!scriptState->contextIsValid())
|
| + return false;
|
| ScriptState::Scope scope(scriptState);
|
| resolver->resolve(v8IteratorResult(scriptState, chunk));
|
| return enqueuePostAction();
|
|
|