summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/serialbus/qmodbusdevice.cpp3
-rw-r--r--tests/auto/qmodbusdevice/tst_qmodbusdevice.cpp10
2 files changed, 13 insertions, 0 deletions
diff --git a/src/serialbus/qmodbusdevice.cpp b/src/serialbus/qmodbusdevice.cpp
index 4aaae87..7ef358c 100644
--- a/src/serialbus/qmodbusdevice.cpp
+++ b/src/serialbus/qmodbusdevice.cpp
@@ -258,6 +258,9 @@ bool QModbusDevice::connectDevice()
*/
void QModbusDevice::disconnectDevice()
{
+ if (state() == QModbusDevice::UnconnectedState)
+ return;
+
setState(QModbusDevice::ClosingState);
//Unconnected is set by backend -> might be delayed by event loop
diff --git a/tests/auto/qmodbusdevice/tst_qmodbusdevice.cpp b/tests/auto/qmodbusdevice/tst_qmodbusdevice.cpp
index 836d881..748c4bf 100644
--- a/tests/auto/qmodbusdevice/tst_qmodbusdevice.cpp
+++ b/tests/auto/qmodbusdevice/tst_qmodbusdevice.cpp
@@ -64,6 +64,7 @@ private slots:
void cleanupTestCase();
void connectDevice();
+ void disconnectDevice();
void state();
void error();
@@ -98,6 +99,15 @@ void tst_QModbusDevice::connectDevice()
QVERIFY(!device->connectDevice());
}
+void tst_QModbusDevice::disconnectDevice()
+{
+ //see QTBUG-66648
+ DummyDevice dev;
+ QCOMPARE(dev.state(), QModbusDevice::UnconnectedState);
+ dev.disconnectDevice();
+ QCOMPARE(dev.state(), QModbusDevice::UnconnectedState);
+}
+
void tst_QModbusDevice::state()
{
device->setState(QModbusDevice::ConnectedState);