Skip to content

Commit ec9377c

Browse files
committed
[minor] Skip unnecessary operations if the socket is already closed
There is no need to remove the already removed `socketOnData` listener, resume the socket, and call `websocket.close()` if the socket is already closed.
1 parent cc7a779 commit ec9377c

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

lib/websocket.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -956,13 +956,15 @@ function sendAfterClose(websocket, data, cb) {
956956
function receiverOnConclude(code, reason) {
957957
const websocket = this[kWebSocket];
958958

959-
websocket._socket.removeListener('data', socketOnData);
960-
process.nextTick(resume, websocket._socket);
961-
962959
websocket._closeFrameReceived = true;
963960
websocket._closeMessage = reason;
964961
websocket._closeCode = code;
965962

963+
if (websocket._socket[kWebSocket] === undefined) return;
964+
965+
websocket._socket.removeListener('data', socketOnData);
966+
process.nextTick(resume, websocket._socket);
967+
966968
if (code === 1005) websocket.close();
967969
else websocket.close(code, reason);
968970
}
@@ -985,15 +987,18 @@ function receiverOnDrain() {
985987
function receiverOnError(err) {
986988
const websocket = this[kWebSocket];
987989

988-
websocket._socket.removeListener('data', socketOnData);
990+
if (websocket._socket[kWebSocket] !== undefined) {
991+
websocket._socket.removeListener('data', socketOnData);
989992

990-
//
991-
// On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See
992-
// https://github.com/websockets/ws/issues/1940.
993-
//
994-
process.nextTick(resume, websocket._socket);
993+
//
994+
// On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See
995+
// https://github.com/websockets/ws/issues/1940.
996+
//
997+
process.nextTick(resume, websocket._socket);
998+
999+
websocket.close(err[kStatusCode]);
1000+
}
9951001

996-
websocket.close(err[kStatusCode]);
9971002
websocket.emit('error', err);
9981003
}
9991004

0 commit comments

Comments
 (0)