diff --git a/lib/_stream_duplex.js b/lib/_stream_duplex.js index 288b8b538c3..59ce8329278 100644 --- a/lib/_stream_duplex.js +++ b/lib/_stream_duplex.js @@ -58,10 +58,10 @@ function Duplex(options) { this.writable = false; this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) + if (options && options.allowHalfOpen === false) { this.allowHalfOpen = false; - - this.once('end', onend); + this.once('end', onend); + } } Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { @@ -96,9 +96,8 @@ Object.defineProperty(Duplex.prototype, 'writableLength', { // the no-half-open enforcer function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) + // If the writable side ended, then we're ok. + if (this._writableState.ended) return; // no more data can be written. diff --git a/test/parallel/test-http-connect.js b/test/parallel/test-http-connect.js index 7f163c24821..f90d235521a 100644 --- a/test/parallel/test-http-connect.js +++ b/test/parallel/test-http-connect.js @@ -34,7 +34,7 @@ server.on('connect', common.mustCall((req, socket, firstBodyChunk) => { assert.strictEqual(socket.listeners('close').length, 0); assert.strictEqual(socket.listeners('drain').length, 0); assert.strictEqual(socket.listeners('data').length, 0); - assert.strictEqual(socket.listeners('end').length, 2); + assert.strictEqual(socket.listeners('end').length, 1); assert.strictEqual(socket.listeners('error').length, 0); socket.write('HTTP/1.1 200 Connection established\r\n\r\n'); diff --git a/test/parallel/test-stream-duplex.js b/test/parallel/test-stream-duplex.js index 1cc54db0520..2b2f9a9a0e6 100644 --- a/test/parallel/test-stream-duplex.js +++ b/test/parallel/test-stream-duplex.js @@ -29,6 +29,8 @@ const stream = new Duplex({ objectMode: true }); assert(Duplex() instanceof Duplex); assert(stream._readableState.objectMode); assert(stream._writableState.objectMode); +assert(stream.allowHalfOpen); +assert.strictEqual(stream.listenerCount('end'), 0); let written; let read;