From a9d9356774a04d3054e27509d8ab3847309ca14b Mon Sep 17 00:00:00 2001 From: Dennis-SEG Date: Sat, 24 Jan 2026 23:01:52 +0100 Subject: [PATCH] fix: prevent double done() call in TCP node close handler The close handler could call done() twice: 1. Directly if !node.connected (line 197) 2. Via client 'close' event handler when node.closing is true (line 183) Fix: Only call done() directly if no client exists. If client exists, let the client 'close' event handler call done() via node.doneClose. Fixes: Dennis-SEG/node-red#4 --- .../node_modules/@node-red/nodes/core/network/31-tcpin.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/31-tcpin.js b/packages/node_modules/@node-red/nodes/core/network/31-tcpin.js index 500bbe2c2c..59f8c6301f 100644 --- a/packages/node_modules/@node-red/nodes/core/network/31-tcpin.js +++ b/packages/node_modules/@node-red/nodes/core/network/31-tcpin.js @@ -192,9 +192,13 @@ module.exports = function(RED) { this.on('close', function(done) { node.doneClose = done; this.closing = true; - if (client) { client.destroy(); } clearTimeout(reconnectTimeout); - if (!node.connected) { done(); } + if (client) { + client.destroy(); + // done() will be called by client 'close' event handler + } else { + done(); + } }); } else {