summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-10-01 21:58:04 +0200
committerLiang Qi <liang.qi@qt.io>2016-10-01 21:58:04 +0200
commitf0482d704e3834f2199889f997b421c0171bd94f (patch)
treee18c050e92771e32e4ea259ad7ba170683403f7e
parentb3d27c681ac216f82ea8b2de1e21858a6c2b7af0 (diff)
parent0d31e8cd10d09fd2b28052c89a4f96c32c104848 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
-rw-r--r--src/serialbus/qcanbusframe.h7
-rw-r--r--src/serialbus/qmodbusrtuserialmaster.cpp7
-rw-r--r--src/serialbus/qmodbusrtuserialmaster_p.h5
3 files changed, 14 insertions, 5 deletions
diff --git a/src/serialbus/qcanbusframe.h b/src/serialbus/qcanbusframe.h
index de11331..9b87f88 100644
--- a/src/serialbus/qcanbusframe.h
+++ b/src/serialbus/qcanbusframe.h
@@ -73,8 +73,10 @@ public:
explicit QCanBusFrame(QCanBusFrame::FrameType type) :
canId(0x0),
isExtendedFrame(0x0),
- version(0x0)
+ version(0x0),
+ extra(0x0)
{
+ memset(reserved, 0, sizeof(reserved));
setFrameType(type);
}
@@ -101,10 +103,11 @@ public:
format(DataFrame),
isExtendedFrame((identifier & 0x1FFFF800U) ? 0x1 : 0x0),
version(0x0),
+ extra(0x0),
load(data)
{
Q_UNUSED(extra);
- Q_UNUSED(reserved);
+ memset(reserved, 0, sizeof(reserved));
}
bool isValid() const
diff --git a/src/serialbus/qmodbusrtuserialmaster.cpp b/src/serialbus/qmodbusrtuserialmaster.cpp
index 331e0ee..5a9555e 100644
--- a/src/serialbus/qmodbusrtuserialmaster.cpp
+++ b/src/serialbus/qmodbusrtuserialmaster.cpp
@@ -144,10 +144,15 @@ bool QModbusRtuSerialMaster::open()
*/
void QModbusRtuSerialMaster::close()
{
- if (state() == QModbusDevice::UnconnectedState)
+ if (state() == QModbusDevice::UnconnectedState ||
+ state() == QModbusDevice::ClosingState) {
return;
+ }
+
+ setState(QModbusDevice::ClosingState);
Q_D(QModbusRtuSerialMaster);
+
if (d->m_serialPort->isOpen())
d->m_serialPort->close();
diff --git a/src/serialbus/qmodbusrtuserialmaster_p.h b/src/serialbus/qmodbusrtuserialmaster_p.h
index e7e9a92..c698ebc 100644
--- a/src/serialbus/qmodbusrtuserialmaster_p.h
+++ b/src/serialbus/qmodbusrtuserialmaster_p.h
@@ -216,8 +216,9 @@ public:
QObject::connect(m_serialPort, &QSerialPort::aboutToClose, q, [this]() {
Q_Q(QModbusRtuSerialMaster);
- if (q->state() != QModbusDevice::ClosingState)
- q->close();
+ Q_UNUSED(q); // To avoid unused variable warning in release mode
+ Q_ASSERT(q->state() == QModbusDevice::ClosingState);
+
m_sendTimer.stop();
m_responseTimer.stop();
});