From 04a3c4bb222f1708877ddd98379be801bfc6fc72 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 14 Apr 2021 22:28:25 +0100 Subject: [PATCH] Ensure mqtt-close message is published when closing mqtt nodes The change in 1.3 where we ensure config nodes are closed last broke this behaviour. Previously, the config node would get closed triggering the close message. With the new 1.3 behaviour, the flow nodes are stopped and as soon as the last flow node deregisters itself, the broker node would disconnect without sending the close message. The fix is to send the close message as part of the deregister flow as that will handle all cases properly --- .../@node-red/nodes/core/network/10-mqtt.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js index db4d300fe..fe4ce1b3b 100644 --- a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js +++ b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js @@ -400,7 +400,15 @@ module.exports = function(RED) { } if (Object.keys(node.users).length === 0) { if (node.client && node.client.connected) { - return node.client.end(done); + // Send close message + if (node.closeMessage) { + node.publish(node.closeMessage,function(err) { + node.client.end(done); + }); + } else { + node.client.end(done); + } + return; } else { node.client.end(); return done(); @@ -639,10 +647,6 @@ module.exports = function(RED) { this.on('close', function(done) { this.closing = true; if (this.connected) { - // Send close message - if (node.closeMessage) { - node.publish(node.closeMessage); - } this.client.once('close', function() { done(); }); @@ -873,4 +877,4 @@ module.exports = function(RED) { } } RED.nodes.registerType("mqtt out",MQTTOutNode); -}; \ No newline at end of file +};