Skip to content

Commit 6069fdc

Browse files
committed
fix: improve socket cleanup to prevent potential memory leaks
- Clear socket timeout before destruction to prevent timer leaks - Explicitly remove all socket event listeners in close() method - Remove error listener from plain socket after TLS upgrade
1 parent 45062ce commit 6069fdc

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

lib/smtp-connection/index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,14 @@ class SMTPConnection extends EventEmitter {
414414

415415
if (socket && !socket.destroyed) {
416416
try {
417+
// Clear socket timeout to prevent timer leaks
418+
socket.setTimeout(0);
419+
// Remove all listeners to allow proper garbage collection
420+
socket.removeListener('data', this._onSocketData);
421+
socket.removeListener('timeout', this._onSocketTimeout);
422+
socket.removeListener('close', this._onSocketClose);
423+
socket.removeListener('end', this._onSocketEnd);
424+
socket.removeListener('error', this._onSocketError);
417425
socket[closeMethod]();
418426
} catch (_E) {
419427
// just ignore
@@ -941,8 +949,10 @@ class SMTPConnection extends EventEmitter {
941949
this.upgrading = false;
942950
this._socket.on('data', this._onSocketData);
943951

952+
// Remove all listeners from the plain socket to allow proper garbage collection
944953
socketPlain.removeListener('close', this._onSocketClose);
945954
socketPlain.removeListener('end', this._onSocketEnd);
955+
socketPlain.removeListener('error', this._onSocketError);
946956

947957
return callback(null, true);
948958
});

0 commit comments

Comments
 (0)