gee: Fix memory leak in HashMap.remove and HashSet.remove
authorJürg Billeter <j@bitron.ch>
Mon, 1 Jun 2009 20:56:52 +0000 (22:56 +0200)
committerJürg Billeter <j@bitron.ch>
Mon, 1 Jun 2009 20:56:52 +0000 (22:56 +0200)
Fixes bug 584440.

gee/hashmap.vala
gee/hashset.vala

index 1c62131..9fa09d3 100644 (file)
@@ -116,9 +116,14 @@ public class Gee.HashMap<K,V> : Object, Map<K,V> {
        public bool remove (K key) {
                Node<K,V>** node = lookup_node (key);
                if (*node != null) {
+                       Node<K,V> next = (owned) (*node)->next;
+
                        (*node)->key = null;
                        (*node)->value = null;
-                       *node = (*node)->next;
+                       delete *node;
+
+                       *node = (owned) next;
+
                        _nnodes--;
                        resize ();
                        _stamp++;
index af23436..d0d0226 100644 (file)
@@ -102,8 +102,13 @@ public class Gee.HashSet<G> : Object, Iterable<G>, Collection<G>, Set<G> {
        public bool remove (G key) {
                Node<G>** node = lookup_node (key);
                if (*node != null) {
+                       Node<G> next = (owned) (*node)->next;
+
                        (*node)->key = null;
-                       *node = (*node)->next;
+                       delete *node;
+
+                       *node = (owned) next;
+
                        _nnodes--;
                        resize ();
                        _stamp++;