summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2019-08-19 15:31:46 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2019-08-19 16:28:03 +0200
commit6048c94d6aabcfc1157771ee6ae70488d2d2b66a (patch)
tree7ae3ab688ac518f449b8187bef51e3b4ceebe8f4
parent7135ea494be0a78ffa395f6109a24a4d4ac8e402 (diff)
Improve termination of examples
Ensure the simulation server is terminated, fixing a process leak (QProcess: Destroyed while process ("...simulationserver.exe") is still running). Attempt to close the connection only when it is actually connected. Change-Id: Ib110ab339b00f1ba6df126e96d82f1c158936f95 Reviewed-by: Rainer Keller <Rainer.Keller@qt.io>
-rw-r--r--examples/opcua/waterpump/waterpump-qml/main.cpp11
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/main.cpp11
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp2
3 files changed, 21 insertions, 3 deletions
diff --git a/examples/opcua/waterpump/waterpump-qml/main.cpp b/examples/opcua/waterpump/waterpump-qml/main.cpp
index 8a1963c..f63614d 100644
--- a/examples/opcua/waterpump/waterpump-qml/main.cpp
+++ b/examples/opcua/waterpump/waterpump-qml/main.cpp
@@ -89,5 +89,14 @@ int main(int argc, char *argv[])
if (engine.rootObjects().isEmpty())
return EXIT_FAILURE;
- return app.exec();
+ const int exitCode = QCoreApplication::exec();
+ if (serverProcess.state() == QProcess::Running) {
+#ifndef Q_OS_WIN
+ serverProcess.terminate();
+#else
+ serverProcess.kill();
+#endif
+ serverProcess.waitForFinished();
+ }
+ return exitCode;
}
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/main.cpp b/examples/opcua/waterpump/waterpump-qmlcpp/main.cpp
index fb22c3d..35ec80a 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/main.cpp
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/main.cpp
@@ -93,5 +93,14 @@ int main(int argc, char *argv[])
if (engine.rootObjects().isEmpty())
return EXIT_FAILURE;
- return app.exec();
+ const int exitCode = QCoreApplication::exec();
+ if (serverProcess.state() == QProcess::Running) {
+#ifndef Q_OS_WIN
+ serverProcess.terminate();
+#else
+ serverProcess.kill();
+#endif
+ serverProcess.waitForFinished();
+ }
+ return exitCode;
}
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
index e6ac84e..858282d 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
@@ -72,7 +72,7 @@ OpcUaMachineBackend::OpcUaMachineBackend(QObject *parent)
OpcUaMachineBackend::~OpcUaMachineBackend()
{
- if (m_client)
+ if (m_client && m_client->state() == QOpcUaClient::Connected)
m_client->disconnectFromEndpoint();
}