Browse Source

fcl-base: TAVLTree.FreeAndClear: clear Root while freeing to avoid accidental access

mattias 2 years ago
parent
commit
342f9c58cd
1 changed files with 9 additions and 1 deletions
  1. 9 1
      packages/fcl-base/src/avl_tree.pp

+ 9 - 1
packages/fcl-base/src/avl_tree.pp

@@ -1146,9 +1146,17 @@ procedure TAVLTree.FreeAndClear;
   end;
   end;
 
 
 // TAVLTree.FreeAndClear
 // TAVLTree.FreeAndClear
+var
+  r: TAVLTreeNode;
 begin
 begin
   // free all data
   // free all data
-  FreeNodeData(Root);
+  r := Root;
+  FRoot := nil; // Prevent any being-destroyed object from removing its node.
+  try
+    FreeNodeData(r);
+  finally
+    FRoot := r;
+  end;
   // free all nodes
   // free all nodes
   Clear;
   Clear;
 end;
 end;