Browse Source

more namespace cleanup

Julius Pfrommer 11 years ago
parent
commit
9e22ad6d20
1 changed files with 9 additions and 1 deletions
  1. 9 1
      src/ua_namespace.c

+ 9 - 1
src/ua_namespace.c

@@ -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: