Skip to content

Commit

Permalink
net: inline and simplify onSocketEnd
Browse files Browse the repository at this point in the history
PR-URL: #18607
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
addaleax authored and BridgeAR committed Feb 22, 2018
1 parent 45982de commit 281d00e
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 31 deletions.
41 changes: 11 additions & 30 deletions lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ function Socket(options) {
}

// shut down the socket when we're finished with it.
this.on('_socketEnd', onSocketEnd);
this.on('end', onReadableStreamEnd);

initSocketHandle(this);

Expand Down Expand Up @@ -360,32 +360,6 @@ function afterShutdown(status, handle) {
}
}

// the EOF has been received, and no more bytes are coming.
// if the writable side has ended already, then clean everything
// up.
function onSocketEnd() {
// XXX Should not have to do as much in this function.
// ended should already be true, since this is called *after*
// the EOF errno and onread has eof'ed
debug('onSocketEnd', this._readableState);
this._readableState.ended = true;
if (this._readableState.endEmitted) {
this.readable = false;
maybeDestroy(this);
} else {
this.once('end', function end() {
this.readable = false;
maybeDestroy(this);
});
this.read(0);
}

if (!this.allowHalfOpen) {
this.write = writeAfterFIN;
this.destroySoon();
}
}

// Provide a better error message when we call end() as a result
// of the other side sending a FIN. The standard 'write after end'
// is overly vague, and makes it seem like the user's code is to blame.
Expand Down Expand Up @@ -537,6 +511,12 @@ Socket.prototype.end = function(data, encoding, callback) {
};


// Called when the 'end' event is emitted.
function onReadableStreamEnd() {
maybeDestroy(this);
}


// Call whenever we set writable=false or readable=false
function maybeDestroy(socket) {
if (!socket.readable &&
Expand Down Expand Up @@ -651,10 +631,11 @@ function onread(nread, buffer) {
// Do it before `maybeDestroy` for correct order of events:
// `end` -> `close`
self.push(null);
self.read(0);

if (self.readableLength === 0) {
self.readable = false;
maybeDestroy(self);
if (!self.allowHalfOpen) {
self.write = writeAfterFIN;
self.destroySoon();
}

// internal end event so that we know that the actual socket
Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-http-connect.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ server.listen(0, common.mustCall(() => {

// the stream.Duplex onend listener
// allow 0 here, so that i can run the same test on streams1 impl
assert(socket.listeners('end').length <= 1);
assert(socket.listenerCount('end') <= 2,
`Found ${socket.listenerCount('end')} end listeners`);

assert.strictEqual(socket.listeners('free').length, 0);
assert.strictEqual(socket.listeners('close').length, 0);
Expand Down

0 comments on commit 281d00e

Please sign in to comment.