Explorar el Código

improving client_disconnect again, fixing memleaks #348

Stasik0 hace 9 años
padre
commit
be91c9dea2
Se han modificado 2 ficheros con 6 adiciones y 7 borrados
  1. 1 0
      include/ua_client.h
  2. 5 7
      src/client/ua_client.c

+ 1 - 0
include/ua_client.h

@@ -31,6 +31,7 @@ typedef struct UA_ClientConfig {
 extern UA_EXPORT const UA_ClientConfig UA_ClientConfig_standard;
 UA_Client UA_EXPORT * UA_Client_new(UA_ClientConfig config, UA_Logger logger);
 
+UA_EXPORT void UA_Client_deleteMembers(UA_Client* client);
 UA_EXPORT void UA_Client_delete(UA_Client* client);
 
 UA_StatusCode UA_EXPORT UA_Client_connect(UA_Client *client, UA_ConnectClientConnection connFunc, char *endpointUrl);

+ 5 - 7
src/client/ua_client.c

@@ -60,11 +60,14 @@ UA_Client * UA_Client_new(UA_ClientConfig config, UA_Logger logger) {
     return client;
 }
 
-void UA_Client_delete(UA_Client* client){
+void UA_Client_deleteMembers(UA_Client* client){
     UA_Connection_deleteMembers(&client->connection);
     UA_SecureChannel_deleteMembersCleanup(&client->channel);
     UA_String_deleteMembers(&client->endpointUrl);
     UA_UserTokenPolicy_deleteMembers(&client->token);
+}
+void UA_Client_delete(UA_Client* client){
+    UA_Client_deleteMembers(client);
     UA_free(client);
 }
 
@@ -519,12 +522,7 @@ UA_StatusCode UA_Client_disconnect(UA_Client *client) {
         if(retval == UA_STATUSCODE_GOOD)
             retval = CloseSecureChannel(client);
     }
-    UA_Connection* c = client->channel.connection;
-    if(c){
-        UA_Connection_detachSecureChannel(c);
-        if(c->close)
-            c->close(c);
-    }
+    UA_Client_deleteMembers(client);
     return retval;
 }