Explorar el Código

Fix memory leaks found by valgrind (#696)

Stefan Profanter hace 8 años
padre
commit
b851cfa2c0

+ 2 - 2
examples/discovery/client_find_servers.c

@@ -49,8 +49,8 @@ static UA_StatusCode FindServers(const char* discoveryServerUrl, size_t* registe
     __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_FINDSERVERSREQUEST],
                         &response, &UA_TYPES[UA_TYPES_FINDSERVERSRESPONSE]);
 
-    //UA_free(request.serverUris);
-    //UA_free(request.localeIds);
+    //UA_Array_delete(request.serverUris, request.serverUrisSize, &UA_TYPES[UA_TYPES_STRING]);
+    //UA_Array_delete(request.localeIds, request.localeIdsSize, &UA_TYPES[UA_TYPES_STRING]);
 
     if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
         UA_LOG_ERROR(logger, UA_LOGCATEGORY_CLIENT,

+ 1 - 0
examples/discovery/server_discovery.c

@@ -36,6 +36,7 @@ int main(void) {
     UA_Server *server = UA_Server_new(config);
 
     UA_StatusCode retval = UA_Server_run(server, &running);
+    UA_String_deleteMembers(&config.applicationDescription.applicationUri);
     UA_Server_delete(server);
     nl.deleteMembers(&nl);
     return (int)retval;

+ 1 - 0
examples/discovery/server_register.c

@@ -183,6 +183,7 @@ int main(int argc, char** argv) {
         return (int)retval;
     }
 
+    UA_String_deleteMembers(&config.applicationDescription.applicationUri);
     UA_Server_delete(server);
     nl.deleteMembers(&nl);
 

+ 6 - 1
src/server/ua_server.c

@@ -77,7 +77,9 @@ static UA_UInt16 addNamespaceInternal(UA_Server *server, const UA_String *name)
 
 UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char* name) {
     UA_String nameString = UA_STRING_ALLOC(name);
-    return addNamespaceInternal(server, &nameString);
+    UA_UInt16 retVal = addNamespaceInternal(server, &nameString);
+    UA_String_deleteMembers(&nameString);
+    return retVal;
 }
 
 #ifdef UA_ENABLE_EXTERNAL_NAMESPACES
@@ -1588,6 +1590,8 @@ static UA_StatusCode register_server_with_discovery_server(UA_Server *server, co
     __UA_Client_Service(client, &request, &UA_TYPES[UA_TYPES_REGISTERSERVERREQUEST],
                         &response, &UA_TYPES[UA_TYPES_REGISTERSERVERRESPONSE]);
 
+    UA_RegisterServerRequest_deleteMembers(&request);
+
     if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
         UA_LOG_ERROR(server->config.logger, UA_LOGCATEGORY_CLIENT,
                      "RegisterServer failed with statuscode 0x%08x", response.responseHeader.serviceResult);
@@ -1597,6 +1601,7 @@ static UA_StatusCode register_server_with_discovery_server(UA_Server *server, co
         return response.responseHeader.serviceResult;
     }
 
+
     UA_Client_disconnect(client);
     UA_Client_delete(client);
 

+ 1 - 0
src/server/ua_services_discovery.c

@@ -308,6 +308,7 @@ void Service_RegisterServer(UA_Server *server, UA_Session *session,
 
         // server found, remove from list
         LIST_REMOVE(registeredServer_entry, pointers);
+        UA_RegisteredServer_deleteMembers(&registeredServer_entry->registeredServer);
 #ifndef UA_ENABLE_MULTITHREADING
         UA_free(registeredServer_entry);
         server->registeredServersSize--;