summaryrefslogtreecommitdiffstats
path: root/src/serialbus/qmodbusrtuserialmaster_p.h
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@theqtcompany.com>2015-12-18 12:48:47 +0100
committerKarsten Heimrich <karsten.heimrich@theqtcompany.com>2015-12-18 14:08:20 +0000
commitec8f65e842744b3480a6e38cad2ba95bf184f882 (patch)
treebcc6f61da1766c5489ca1072b3894ae92e1665b7 /src/serialbus/qmodbusrtuserialmaster_p.h
parent05cabf1fbb7c407df9c7e3e96ed661367a90f0a0 (diff)
Implement: If a queued object gets deleted, remove it from the queue.
Change-Id: Ibe9902e2a884b844898a88544fed809d3c7f5eeb Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/serialbus/qmodbusrtuserialmaster_p.h')
-rw-r--r--src/serialbus/qmodbusrtuserialmaster_p.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/serialbus/qmodbusrtuserialmaster_p.h b/src/serialbus/qmodbusrtuserialmaster_p.h
index 88644de..578169f 100644
--- a/src/serialbus/qmodbusrtuserialmaster_p.h
+++ b/src/serialbus/qmodbusrtuserialmaster_p.h
@@ -259,6 +259,14 @@ public:
QModbusReply *reply = new QModbusReply(type, slaveAddress, q);
m_queue.enqueue(QueueElement{ reply, request, unit, m_numberOfRetries });
+ q->connect(reply, &QObject::destroyed, q, [this](QObject *obj) {
+ foreach (const QueueElement &element, m_queue) {
+ if (element.reply != obj)
+ continue;
+ m_queue.removeAll(element);
+ QTimer::singleShot(0, [this]() { sendNextRequest(); });
+ }
+ });
if (!m_responseTimer || (!m_responseTimer->isActive()))
sendNextRequest();