Skip to content

Commit f263659

Browse files
ronagMylesBorins
authored andcommitted
stream: eos make const state const
writable & readable is based on type and is not actual state, treat them as such. Backport-PR-URL: #32178 PR-URL: #32031 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Luigi Pinca <[email protected]>
1 parent 4b04bf8 commit f263659

File tree

2 files changed

+8
-12
lines changed

2 files changed

+8
-12
lines changed

lib/internal/streams/end-of-stream.js

+7-11
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ function eos(stream, opts, callback) {
4747

4848
callback = once(callback);
4949

50-
let readable = opts.readable ||
50+
const readable = opts.readable ||
5151
(opts.readable !== false && isReadable(stream));
52-
let writable = opts.writable ||
52+
const writable = opts.writable ||
5353
(opts.writable !== false && isWritable(stream));
5454

5555
const onlegacyfinish = () => {
@@ -59,35 +59,31 @@ function eos(stream, opts, callback) {
5959
let writableFinished = stream.writableFinished ||
6060
(stream._writableState && stream._writableState.finished);
6161
const onfinish = () => {
62-
writable = false;
6362
writableFinished = true;
64-
if (!readable) callback.call(stream);
63+
if (!readable || readableEnded) callback.call(stream);
6564
};
6665

6766
let readableEnded = stream.readableEnded ||
6867
(stream._readableState && stream._readableState.endEmitted);
6968
const onend = () => {
70-
readable = false;
7169
readableEnded = true;
72-
if (!writable) callback.call(stream);
70+
if (!writable || writableFinished) callback.call(stream);
7371
};
7472

7573
const onerror = (err) => {
7674
callback.call(stream, err);
7775
};
7876

7977
const onclose = () => {
80-
let err;
8178
if (readable && !readableEnded) {
8279
if (!stream._readableState || !stream._readableState.ended)
83-
err = new ERR_STREAM_PREMATURE_CLOSE();
84-
return callback.call(stream, err);
80+
return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE());
8581
}
8682
if (writable && !writableFinished) {
8783
if (!isWritableFinished(stream))
88-
err = new ERR_STREAM_PREMATURE_CLOSE();
89-
return callback.call(stream, err);
84+
return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE());
9085
}
86+
callback.call(stream);
9187
};
9288

9389
const onrequest = () => {

test/parallel/test-stream-finished.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ const { promisify } = require('util');
181181
const streamLike = new EE();
182182
streamLike.readableEnded = true;
183183
streamLike.readable = true;
184-
finished(streamLike, common.mustCall);
184+
finished(streamLike, common.mustCall());
185185
streamLike.emit('close');
186186
}
187187

0 commit comments

Comments
 (0)