[libgee] Fix the unfreeing on clear in TreeMap/TreeSet
- From: Maciej Marcin Piechotka <mpiechotka src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgee] Fix the unfreeing on clear in TreeMap/TreeSet
- Date: Mon, 2 Aug 2010 22:32:38 +0000 (UTC)
commit 1225ccba10e91c1384e27bf4989c732caceee5d8
Author: Maciej Piechotka <uzytkownik2 gmail com>
Date: Tue Aug 3 00:23:52 2010 +0200
Fix the unfreeing on clear in TreeMap/TreeSet
gee/treemap.vala | 14 +++++++++++++-
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++;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]