summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-11-03 03:03:30 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-11-03 03:03:30 +0100
commitd34ae8f61fa92ef31225cede984f07a8083e50fb (patch)
tree17d3daf469ddd1a70781539022b1a13e65c8d7a7
parent8c4b7368b5b8c499a3cdf40b2f4ae8bbfc616dd0 (diff)
parent834258bb3d17638e8e3dc2eca2a3115006c092fd (diff)
Merge remote-tracking branch 'origin/5.12' into dev
-rw-r--r--src/serialbus/qmodbusrtuserialmaster.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/serialbus/qmodbusrtuserialmaster.cpp b/src/serialbus/qmodbusrtuserialmaster.cpp
index 1db43a9..99006f4 100644
--- a/src/serialbus/qmodbusrtuserialmaster.cpp
+++ b/src/serialbus/qmodbusrtuserialmaster.cpp
@@ -150,18 +150,24 @@ void QModbusRtuSerialMaster::close()
if (d->m_serialPort->isOpen())
d->m_serialPort->close();
- if (d->m_queue.count())
- qCDebug(QT_MODBUS_LOW) << "(RTU client) Aborted replies:" << d->m_queue.count();
+ // enqueue current active request back for abortion
+ d->m_queue.enqueue(d->m_current);
+ d->m_current = QModbusClientPrivate::QueueElement();
+ int numberOfAborts = 0;
while (!d->m_queue.isEmpty()) {
// Finish each open reply and forget them
QModbusRtuSerialMasterPrivate::QueueElement elem = d->m_queue.dequeue();
if (!elem.reply.isNull()) {
elem.reply->setError(QModbusDevice::ReplyAbortedError,
QModbusClient::tr("Reply aborted due to connection closure."));
+ numberOfAborts++;
}
}
+ if (numberOfAborts > 0)
+ qCDebug(QT_MODBUS_LOW) << "(RTU client) Aborted replies:" << numberOfAborts;
+
setState(QModbusDevice::UnconnectedState);
}