mirror of https://github.com/node-red/node-red.git
fix: prevent double done() call in TCP request node close handler
Use a guard flag to prevent done() from being called multiple times. This handles the case where: - If connected: destroy() triggers close event -> callDone() - If not connected: callDone() is called directly as safety net - Guard prevents double-call if close event fires after direct call Addresses review feedback from @knolleary. Fixes #5452pull/5459/head
parent
1019d52f78
commit
ee954ab208
|
|
@ -190,11 +190,23 @@ module.exports = function(RED) {
|
|||
setupTcpClient();
|
||||
|
||||
this.on('close', function(done) {
|
||||
node.doneClose = done;
|
||||
var doneCalled = false;
|
||||
var callDone = function() {
|
||||
if (!doneCalled) {
|
||||
doneCalled = true;
|
||||
done();
|
||||
}
|
||||
};
|
||||
node.doneClose = callDone;
|
||||
this.closing = true;
|
||||
if (client) { client.destroy(); }
|
||||
clearTimeout(reconnectTimeout);
|
||||
if (!node.connected) { done(); }
|
||||
if (client) {
|
||||
client.destroy();
|
||||
// If not connected, close event may not fire, so call done as safety net
|
||||
if (!node.connected) { callDone(); }
|
||||
} else {
|
||||
callDone();
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue