diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-08-19 15:31:46 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-08-19 16:28:03 +0200 |
commit | 6048c94d6aabcfc1157771ee6ae70488d2d2b66a (patch) | |
tree | 7ae3ab688ac518f449b8187bef51e3b4ceebe8f4 | |
parent | 7135ea494be0a78ffa395f6109a24a4d4ac8e402 (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.cpp | 11 | ||||
-rw-r--r-- | examples/opcua/waterpump/waterpump-qmlcpp/main.cpp | 11 | ||||
-rw-r--r-- | examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp | 2 |
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(); } |