diff --git a/lib/internal/streams/end-of-stream.js b/lib/internal/streams/end-of-stream.js index c224b44eac6631..ab60f5a7ea78f1 100644 --- a/lib/internal/streams/end-of-stream.js +++ b/lib/internal/streams/end-of-stream.js @@ -165,13 +165,13 @@ function eos(stream, options, callback) { } else if ( !readable && (!willEmitClose || isReadable(stream)) && - (writableFinished || !isWritable(stream)) + (writableFinished || isWritable(stream) === false) ) { process.nextTick(onclose); } else if ( !writable && (!willEmitClose || isWritable(stream)) && - (readableFinished || !isReadable(stream)) + (readableFinished || isReadable(stream) === false) ) { process.nextTick(onclose); } else if ((rState && stream.req && stream.aborted)) { diff --git a/test/parallel/test-stream-finished.js b/test/parallel/test-stream-finished.js index 8ada0c4c348cb7..570acded584b7d 100644 --- a/test/parallel/test-stream-finished.js +++ b/test/parallel/test-stream-finished.js @@ -7,7 +7,8 @@ const { Transform, finished, Duplex, - PassThrough + PassThrough, + Stream, } = require('stream'); const assert = require('assert'); const EE = require('events'); @@ -630,3 +631,11 @@ testClosed((opts) => new Writable({ write() {}, ...opts })); })); })); } + +{ + // Legacy Streams do not inherit from Readable or Writable. + // We cannot really assume anything about them, so we cannot close them + // automatically. + const s = new Stream(); + finished(s, common.mustNotCall()); +}