Browse Source

Merge pull request #325 from StalderT/master

Memory leak in ServerNetworkLayerTCP_getJobs function
Sten Grüner 9 years ago
parent
commit
db66467b2f
3 changed files with 10 additions and 4 deletions
  1. 6 0
      examples/networklayer_tcp.c
  2. 4 3
      src/server/ua_server_addressspace.c
  3. 0 1
      src/server/ua_subscription.c

+ 6 - 0
examples/networklayer_tcp.c

@@ -354,6 +354,12 @@ static UA_Int32 ServerNetworkLayerTCP_getJobs(UA_ServerNetworkLayer *nl, UA_Job
         j++;
     }
 
+    if (j == 0)
+    {
+    	free(js);
+    	js = NULL;
+    }
+
     *jobs = js;
     return j;
 }

+ 4 - 3
src/server/ua_server_addressspace.c

@@ -408,6 +408,7 @@ UA_Server_addMethodNode(UA_Server *server, const UA_QualifiedName browseName, UA
     
     if (createdNodeId != UA_NULL)
       UA_NodeId_copy(&addRes.addedNodeId, createdNodeId);
+    UA_AddNodesResult_deleteMembers(&addRes);
     
     /* create InputArguments */
     UA_NodeId argId = UA_NODEID_NUMERIC(nodeId.namespaceIndex, 0); 
@@ -426,9 +427,8 @@ UA_Server_addMethodNode(UA_Server *server, const UA_QualifiedName browseName, UA
         // TODO Remove node
         return addRes.statusCode;
     }
-    if (createdNodeId != UA_NULL)
-      UA_NodeId_copy(&addRes.addedNodeId, createdNodeId);
-    
+    UA_AddNodesResult_deleteMembers(&addRes);
+
     /* create OutputArguments */
     argId = UA_NODEID_NUMERIC(nodeId.namespaceIndex, 0);
     UA_VariableNode *outputArgumentsVariableNode  = UA_VariableNode_new();
@@ -445,6 +445,7 @@ UA_Server_addMethodNode(UA_Server *server, const UA_QualifiedName browseName, UA
     if(addRes.statusCode != UA_STATUSCODE_GOOD)
         // TODO Remove node
         retval = addRes.statusCode;
+    UA_AddNodesResult_deleteMembers(&addRes);
     return retval;
 }
 #endif

+ 0 - 1
src/server/ua_subscription.c

@@ -37,7 +37,6 @@ void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *ser
     
     // Delete unpublished Notifications
     LIST_FOREACH_SAFE(not, &subscription->unpublishedNotifications, listEntry, tmp_not) {
-        LIST_REMOVE(not, listEntry);
         Subscription_deleteUnpublishedNotification(not->notification->sequenceNumber, subscription);
     }