summaryrefslogtreecommitdiffstats
path: root/src/plugins/opcua/open62541/qopen62541backend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/opcua/open62541/qopen62541backend.cpp')
-rw-r--r--src/plugins/opcua/open62541/qopen62541backend.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/plugins/opcua/open62541/qopen62541backend.cpp b/src/plugins/opcua/open62541/qopen62541backend.cpp
index 24aedf8..ec0eb09 100644
--- a/src/plugins/opcua/open62541/qopen62541backend.cpp
+++ b/src/plugins/opcua/open62541/qopen62541backend.cpp
@@ -75,6 +75,8 @@ Open62541AsyncBackend::Open62541AsyncBackend(QOpen62541Client *parent)
Open62541AsyncBackend::~Open62541AsyncBackend()
{
qDeleteAll(m_subscriptions);
+ if (m_uaclient)
+ UA_Client_delete(m_uaclient);
}
void Open62541AsyncBackend::readAttributes(uintptr_t handle, UA_NodeId id, QOpcUa::NodeAttributes attr, QString indexRange)
@@ -432,6 +434,9 @@ static void clientStateCallback(UA_Client *client, UA_ClientState state)
void Open62541AsyncBackend::connectToEndpoint(const QUrl &url)
{
+ if (m_uaclient)
+ UA_Client_delete(m_uaclient);
+
UA_ClientConfig conf = UA_ClientConfig_default;
conf.clientContext = this;
conf.stateCallback = &clientStateCallback;
@@ -464,14 +469,16 @@ void Open62541AsyncBackend::disconnectFromEndpoint()
m_subscriptions.clear();
m_attributeMapping.clear();
- UA_StatusCode ret = UA_Client_disconnect(m_uaclient);
- if (ret != UA_STATUSCODE_GOOD) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Open62541: Failed to disconnect";
- // Fall through intentionally
+ if (m_uaclient) {
+ UA_StatusCode ret = UA_Client_disconnect(m_uaclient);
+ if (ret != UA_STATUSCODE_GOOD) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Open62541: Failed to disconnect";
+ // Fall through intentionally
+ }
+ UA_Client_delete(m_uaclient);
+ m_uaclient = nullptr;
}
- UA_Client_delete(m_uaclient);
- m_uaclient = nullptr;
emit stateAndOrErrorChanged(QOpcUaClient::Disconnected, QOpcUaClient::NoError);
}