ecere/com/Map;: Fixed memory leaks
authorJerome St-Louis <jerome@ecere.com>
Wed, 9 Dec 2015 17:09:53 +0000 (12:09 -0500)
committerJerome St-Louis <jerome@ecere.com>
Wed, 9 Dec 2015 18:04:40 +0000 (13:04 -0500)
- Keys of Maps from Delete() and Free()

ecere/src/com/containers/Map.ec

index 2c21008..40e57b0 100644 (file)
@@ -123,9 +123,8 @@ public class Map<class MT, class V> : CustomAVLTree<MapNode<MT, V>, I = MT, D =
       }
    }
 
-   void Remove(MapNode<MT, V> node)
+   void FreeKey(MapNode<MT, V> node)
    {
-      CustomAVLTree::Remove(node);
       if(class(MT).type == structClass)
       {
          // TODO: Make this easier...
@@ -134,6 +133,12 @@ public class Map<class MT, class V> : CustomAVLTree<MapNode<MT, V>, I = MT, D =
       }
       else
          delete node.key;
+   }
+
+   void Remove(MapNode<MT, V> node)
+   {
+      CustomAVLTree::Remove(node);
+      FreeKey(node);
       delete node;
    }
 
@@ -159,6 +164,7 @@ public class Map<class MT, class V> : CustomAVLTree<MapNode<MT, V>, I = MT, D =
             MapNode<MT, V> parent = node.parent;
             V value = GetData(node);
             delete value;
+            FreeKey(node);
             delete node;
 
             node = parent;
@@ -172,6 +178,7 @@ public class Map<class MT, class V> : CustomAVLTree<MapNode<MT, V>, I = MT, D =
    {
       V value = GetData(node);
       delete value;
+      FreeKey(node);
       Remove(node);
    }