Browse Source

Fix a possible double release of nodes

Julius Pfrommer 7 years ago
parent
commit
1832d0ef8e
1 changed files with 2 additions and 2 deletions
  1. 2 2
      src/server/ua_services_nodemanagement.c

+ 2 - 2
src/server/ua_services_nodemanagement.c

@@ -876,8 +876,6 @@ AddNode_typeCheckAddRefs(UA_Server *server, UA_Session *session, const UA_NodeId
     UA_Nodestore_release(server, node);
     UA_Nodestore_release(server, node);
     if(type)
     if(type)
         UA_Nodestore_release(server, type);
         UA_Nodestore_release(server, type);
-    if(retval != UA_STATUSCODE_GOOD)
-        UA_Server_deleteNode(server, *nodeId, UA_TRUE);
     return retval;
     return retval;
 }
 }
 
 
@@ -980,6 +978,8 @@ Operation_addNode_begin(UA_Server *server, UA_Session *session, void *nodeContex
     /* Typecheck and add references to parent and type definition */
     /* Typecheck and add references to parent and type definition */
     retval = AddNode_typeCheckAddRefs(server, session, outNewNodeId, parentNodeId,
     retval = AddNode_typeCheckAddRefs(server, session, outNewNodeId, parentNodeId,
                                       referenceTypeId, &item->typeDefinition.nodeId);
                                       referenceTypeId, &item->typeDefinition.nodeId);
+    if(retval != UA_STATUSCODE_GOOD)
+        UA_Server_deleteNode(server, *outNewNodeId, UA_TRUE);
     if(outNewNodeId == &newId)
     if(outNewNodeId == &newId)
         UA_NodeId_deleteMembers(&newId);
         UA_NodeId_deleteMembers(&newId);
     return retval;
     return retval;