From 76d43fc99e9e7ac925cdbe3bd5b29be37c1db4b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Tue, 11 May 2021 09:00:13 +0200 Subject: [PATCH] Improve node removed behavior --- libnymea-zigbee/zigbeenetwork.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/libnymea-zigbee/zigbeenetwork.cpp b/libnymea-zigbee/zigbeenetwork.cpp index d5a0c47..92e6243 100644 --- a/libnymea-zigbee/zigbeenetwork.cpp +++ b/libnymea-zigbee/zigbeenetwork.cpp @@ -353,16 +353,17 @@ void ZigbeeNetwork::removeZigbeeNode(const ZigbeeAddress &address) } qCDebug(dcZigbeeNetwork()) << "Removing" << node << "from the newtork"; + removeNodeInternally(node); + ZigbeeDeviceObjectReply *zdoReply = node->deviceObject()->requestMgmtLeaveNetwork(); - connect(zdoReply, &ZigbeeDeviceObjectReply::finished, this, [this, zdoReply, node](){ + connect(zdoReply, &ZigbeeDeviceObjectReply::finished, this, [zdoReply, node](){ if (zdoReply->error() != ZigbeeDeviceObjectReply::ErrorNoError) { qCWarning(dcZigbeeNode()) << "Failed to send management leave request to" << node << zdoReply->error(); qCWarning(dcZigbeeNode()) << "This node is gonna be removed internally. TODO: try to remove using ZDO once it shows up the next time."; } - removeNode(node); + node->deleteLater(); }); - } void ZigbeeNetwork::printNetwork() @@ -462,7 +463,8 @@ void ZigbeeNetwork::removeNodeInternally(ZigbeeNode *node) m_nodes.removeAll(node); emit nodeRemoved(node); - node->deleteLater(); + + m_database->removeNode(node); } void ZigbeeNetwork::initializeDatabase() @@ -616,7 +618,7 @@ void ZigbeeNetwork::removeNode(ZigbeeNode *node) { qCDebug(dcZigbeeNetwork()) << "Remove node" << node; removeNodeInternally(node); - m_database->removeNode(node); + node->deleteLater(); } void ZigbeeNetwork::removeUninitializedNode(ZigbeeNode *node)