|
@@ -110,7 +110,6 @@ UA_Int32 insert_node(namespace *ns, UA_Node *node) {
|
|
|
pthread_rwlock_init((pthread_rwlock_t *)slot->lock, NULL);
|
|
|
#endif
|
|
|
slot->node = node;
|
|
|
- // TODO: @jpfr count vs size, not quite sure
|
|
|
ns->count++;
|
|
|
return UA_SUCCESS;
|
|
|
}
|
|
@@ -177,6 +176,7 @@ void delete_node(namespace *ns, UA_NodeId *nodeid) {
|
|
|
ns_entry *slot;
|
|
|
if (find_slot(ns, &slot, nodeid) != UA_SUCCESS)
|
|
|
return;
|
|
|
+ // TODO: Check if deleting the node makes the namespace inconsistent.
|
|
|
clear_slot(ns, slot);
|
|
|
|
|
|
/* Downsize the hashmap if it is very empty */
|
|
@@ -316,27 +316,35 @@ static inline void clear_slot(namespace *ns, ns_entry *slot) {
|
|
|
#endif
|
|
|
switch(slot->node->nodeClass) {
|
|
|
case UA_NODECLASS_OBJECT:
|
|
|
+ UA_ObjectNode_deleteMembers((UA_ObjectNode *) slot->node);
|
|
|
UA_ObjectNode_delete((UA_ObjectNode *) slot->node);
|
|
|
break;
|
|
|
case UA_NODECLASS_VARIABLE:
|
|
|
+ UA_VariableNode_deleteMembers((UA_VariableNode *) slot->node);
|
|
|
UA_VariableNode_delete((UA_VariableNode *) slot->node);
|
|
|
break;
|
|
|
case UA_NODECLASS_METHOD:
|
|
|
+ UA_MethodNode_deleteMembers((UA_MethodNode *) slot->node);
|
|
|
UA_MethodNode_delete((UA_MethodNode *) slot->node);
|
|
|
break;
|
|
|
case UA_NODECLASS_OBJECTTYPE:
|
|
|
+ UA_ObjectTypeNode_deleteMembers((UA_ObjectTypeNode *) slot->node);
|
|
|
UA_ObjectTypeNode_delete((UA_ObjectTypeNode *) slot->node);
|
|
|
break;
|
|
|
case UA_NODECLASS_VARIABLETYPE:
|
|
|
+ UA_VariableTypeNode_deleteMembers((UA_VariableTypeNode *) slot->node);
|
|
|
UA_VariableTypeNode_delete((UA_VariableTypeNode *) slot->node);
|
|
|
break;
|
|
|
case UA_NODECLASS_REFERENCETYPE:
|
|
|
+ UA_ReferenceTypeNode_deleteMembers((UA_ReferenceTypeNode *) slot->node);
|
|
|
UA_ReferenceTypeNode_delete((UA_ReferenceTypeNode *) slot->node);
|
|
|
break;
|
|
|
case UA_NODECLASS_DATATYPE:
|
|
|
+ UA_DataTypeNode_deleteMembers((UA_DataTypeNode *) slot->node);
|
|
|
UA_DataTypeNode_delete((UA_DataTypeNode *) slot->node);
|
|
|
break;
|
|
|
case UA_NODECLASS_VIEW:
|
|
|
+ UA_ViewNode_deleteMembers((UA_ViewNode *) slot->node);
|
|
|
UA_ViewNode_delete((UA_ViewNode *) slot->node);
|
|
|
break;
|
|
|
default:
|