diff options
author | Maciej Piechotka <uzytkownik2@gmail.com> | 2010-08-03 00:23:52 +0200 |
---|---|---|
committer | Maciej Piechotka <uzytkownik2@gmail.com> | 2010-08-03 00:25:33 +0200 |
commit | cd646f7e8f3a58c329c94fdb2ead574c8464eb45 (patch) | |
tree | ecd50e4a908fe1d707d0abb15ee1d675e4d71024 | |
parent | d8154f3c4c5f5a36bd43d0512145212e35c82099 (diff) | |
download | libgee-cd646f7e8f3a58c329c94fdb2ead574c8464eb45.tar.gz |
Fix the unfreeing on clear in TreeMap/TreeSet
-rw-r--r-- | gee/treemap.vala | 14 | ||||
-rw-r--r-- | gee/treeset.vala | 12 |
2 files changed, 24 insertions, 2 deletions
diff --git a/gee/treemap.vala b/gee/treemap.vala index 4e4d438..5b9d5bf 100644 --- a/gee/treemap.vala +++ b/gee/treemap.vala @@ -257,6 +257,8 @@ public class Gee.TreeMap<K,V> : Gee.AbstractMap<K,V> { } else { last = n.next; } + node.key = null; + node.value = null; node = null; _size--; } @@ -354,11 +356,21 @@ public class Gee.TreeMap<K,V> : Gee.AbstractMap<K,V> { return b; } + private inline void clear_subtree (owned Node<G> node) { + node.key = null; + node.value = null; + clear_subtree ((owned) node.left); + clear_subtree ((owned) node.right); + } + /** * {@inheritDoc} */ public override void clear () { - first = last = root = null; + if (root != null) { + clear_subtree ((owned) root); + first = last = null; + } _size = 0; stamp++; } diff --git a/gee/treeset.vala b/gee/treeset.vala index bb5d868..2ebe1f7 100644 --- a/gee/treeset.vala +++ b/gee/treeset.vala @@ -224,6 +224,7 @@ public class Gee.TreeSet<G> : AbstractSet<G>, SortedSet<G> { } else { _last = n.prev; } + node.key = null; node = null; _size--; } @@ -311,11 +312,20 @@ public class Gee.TreeSet<G> : AbstractSet<G>, SortedSet<G> { return b; } + private inline void clear_subtree (owned Node<G> node) { + node.key = null; + clear_subtree ((owned) node.left); + clear_subtree ((owned) node.right); + } + /** * {@inheritDoc} */ public override void clear () { - _first = _last = root = null; + if (root != null) { + clear_subtree ((owned) root); + first = last = null; + } _size = 0; stamp++; } |