summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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);
}