From fd12d0518be28b618a8ee1291229f549ee6aa7f5 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 12 May 2022 17:33:35 +0200 Subject: [PATCH] Explicitly stop the ZCL timeout timer Also don't use a QueuedConnection, as it's not guaranteed the sender will still live on by the time slot is called. --- libnymea-zigbee/zcl/zigbeecluster.cpp | 3 ++- libnymea-zigbee/zdo/zigbeedeviceobject.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libnymea-zigbee/zcl/zigbeecluster.cpp b/libnymea-zigbee/zcl/zigbeecluster.cpp index 280d86e..ef161c2 100644 --- a/libnymea-zigbee/zcl/zigbeecluster.cpp +++ b/libnymea-zigbee/zcl/zigbeecluster.cpp @@ -208,7 +208,7 @@ ZigbeeClusterReply *ZigbeeCluster::createClusterReply(const ZigbeeNetworkRequest connect(zclReply, &ZigbeeClusterReply::finished, this, [this, zclReply](){ zclReply->deleteLater(); m_pendingReplies.remove(zclReply->transactionSequenceNumber()); - }, Qt::QueuedConnection); + }); return zclReply; } @@ -412,6 +412,7 @@ void ZigbeeCluster::finishZclReply(ZigbeeClusterReply *zclReply) { qCDebug(dcZigbeeCluster()) << "ZigbeeClusterReply finished" << zclReply->request() << zclReply->requestFrame() << zclReply->responseFrame(); // FIXME: Set the status + zclReply->m_timeoutTimer.stop(); emit zclReply->finished(); } diff --git a/libnymea-zigbee/zdo/zigbeedeviceobject.cpp b/libnymea-zigbee/zdo/zigbeedeviceobject.cpp index d4aea05..91918fd 100644 --- a/libnymea-zigbee/zdo/zigbeedeviceobject.cpp +++ b/libnymea-zigbee/zdo/zigbeedeviceobject.cpp @@ -661,7 +661,7 @@ ZigbeeDeviceObjectReply *ZigbeeDeviceObject::createZigbeeDeviceObjectReply(const if (zdoReply->error() != ZigbeeDeviceObjectReply::ErrorNoError) { qCWarning(dcZigbeeDeviceObject()) << "ZDO request error for TSN:" << transactionSequenceNumber; } - }, Qt::QueuedConnection); + }); m_pendingReplies.insert(transactionSequenceNumber, zdoReply); return zdoReply; }