Skip to content

Commit ec81573

Browse files
committed
stream: minimize webstream abort hook behavior changes
1 parent e65f320 commit ec81573

2 files changed

Lines changed: 17 additions & 19 deletions

File tree

lib/internal/webstreams/readablestream.js

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -286,15 +286,8 @@ class ReadableStream {
286286
[kControllerAbortFunction](error) {
287287
if (!isReadableStream(this))
288288
throw new ERR_INVALID_THIS('ReadableStream');
289-
290-
const controller = this[kState].controller;
291-
if (isReadableStreamDefaultController(controller)) {
292-
readableStreamDefaultControllerError(controller, error);
293-
return;
294-
}
295-
296-
assert(isReadableByteStreamController(controller));
297-
readableByteStreamControllerError(controller, error);
289+
if (this[kState].state === 'readable')
290+
setPromiseHandled(readableStreamCancel(this, error, 'errored'));
298291
}
299292

300293
get [kIsDisturbed]() {
@@ -2090,22 +2083,26 @@ function isReadableStreamLocked(stream) {
20902083
return stream[kState].reader !== undefined;
20912084
}
20922085

2093-
function readableStreamCancel(stream, reason) {
2086+
function readableStreamCancel(stream, reason, finalState = 'closed') {
20942087
stream[kState].disturbed = true;
20952088
switch (stream[kState].state) {
20962089
case 'closed':
20972090
return PromiseResolve();
20982091
case 'errored':
20992092
return PromiseReject(stream[kState].storedError);
21002093
}
2101-
readableStreamClose(stream);
2102-
const {
2103-
reader,
2104-
} = stream[kState];
2105-
if (reader !== undefined && readableStreamHasBYOBReader(stream)) {
2106-
for (let n = 0; n < reader[kState].readIntoRequests.length; n++)
2107-
reader[kState].readIntoRequests[n][kClose]();
2108-
reader[kState].readIntoRequests = [];
2094+
if (finalState === 'errored') {
2095+
readableStreamError(stream, reason);
2096+
} else {
2097+
readableStreamClose(stream);
2098+
const {
2099+
reader,
2100+
} = stream[kState];
2101+
if (reader !== undefined && readableStreamHasBYOBReader(stream)) {
2102+
for (let n = 0; n < reader[kState].readIntoRequests.length; n++)
2103+
reader[kState].readIntoRequests[n][kClose]();
2104+
reader[kState].readIntoRequests = [];
2105+
}
21092106
}
21102107

21112108
return PromisePrototypeThen(

lib/internal/webstreams/writablestream.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ class WritableStream {
187187
[kControllerAbortFunction](reason) {
188188
if (!isWritableStream(this))
189189
throw new ERR_INVALID_THIS('WritableStream');
190-
setPromiseHandled(writableStreamAbort(this, reason));
190+
if (this[kState].state === 'writable')
191+
setPromiseHandled(writableStreamAbort(this, reason));
191192
}
192193

193194
get [kIsErrored]() {

0 commit comments

Comments
 (0)