diff options
author | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-12-18 12:48:47 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-12-18 14:08:20 +0000 |
commit | ec8f65e842744b3480a6e38cad2ba95bf184f882 (patch) | |
tree | bcc6f61da1766c5489ca1072b3894ae92e1665b7 /src/serialbus/qmodbusrtuserialmaster_p.h | |
parent | 05cabf1fbb7c407df9c7e3e96ed661367a90f0a0 (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.h | 8 |
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(); |