[libgee] Fix problem of partially releasing hp context



commit 18a9602cbffc476f03317b49e368b18d46ce4e96
Author: Maciej Piechotka <uzytkownik2 gmail com>
Date:   Fri Jan 20 15:24:13 2012 +0000

    Fix problem of partially releasing hp context

 gee/hazardpointer.vala |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)
---
diff --git a/gee/hazardpointer.vala b/gee/hazardpointer.vala
index 522c469..b0ac2de 100644
--- a/gee/hazardpointer.vala
+++ b/gee/hazardpointer.vala
@@ -539,6 +539,7 @@ public class Gee.HazardPointer<G> { // FIXME: Make it a struct
 			stderr.printf ("Exiting context %p (policy %s, parent %p)\n", this, _policy != null ? _policy.to_string () : null, _parent);
 #endif
 			int size = _to_free.size;
+			bool clean_parent = false;
 			if (size > 0) {
 				ArrayList<FreeNode *>? remaining;
 				if (_parent == null || size >= THRESHOLD)
@@ -548,11 +549,15 @@ public class Gee.HazardPointer<G> { // FIXME: Make it a struct
 				if (remaining != null) {
 					assert (_parent != null);
 					_parent->_to_free.add_all (remaining);
-					if (_parent->_to_free.size >= THRESHOLD)
-						HazardPointer.try_free (_parent->_to_free);
+					clean_parent = true;
 				}
 			}
+#if DEBUG
+			stderr.printf ("Setting current context to %p\n", _parent);
+#endif
 			_current_context.set (_parent, null);
+			if (clean_parent)
+				HazardPointer.try_free (_parent->_to_free);
 		}
 
 		/**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]