Author: Gregor Wegberg <[email protected]>
Branch: gc-incminimark-pinning
Changeset: r71859:4771af2b6a07
Date: 2014-05-29 20:36 +0200
http://bitbucket.org/pypy/pypy/changeset/4771af2b6a07/
Log: additional test. passes just fine
diff --git a/rpython/memory/gc/test/test_object_pinning.py
b/rpython/memory/gc/test/test_object_pinning.py
--- a/rpython/memory/gc/test/test_object_pinning.py
+++ b/rpython/memory/gc/test/test_object_pinning.py
@@ -173,6 +173,30 @@
assert self.gc.nursery_free == self.gc.nursery
assert self.gc.nursery_top > self.gc.nursery
+ def test_collect_dead_pinned_objects(self):
+ # prepare three object, where two are stackroots
+ ptr_stackroot_1 = self.malloc(S)
+ ptr_stackroot_1.someInt = 100
+ self.stackroots.append(ptr_stackroot_1)
+
+ ptr_not_stackroot = self.malloc(S)
+
+ ptr_stackroot_2 = self.malloc(S)
+ ptr_stackroot_2.someInt = 100
+ self.stackroots.append(ptr_stackroot_2)
+
+ # pin all three objects
+ assert self.gc.pin(llmemory.cast_ptr_to_adr(ptr_stackroot_1))
+ assert self.gc.pin(llmemory.cast_ptr_to_adr(ptr_not_stackroot))
+ assert self.gc.pin(llmemory.cast_ptr_to_adr(ptr_stackroot_2))
+ assert self.gc.pinned_objects_in_nursery == 3
+
+ self.gc.minor_collection()
+ assert self.gc.pinned_objects_in_nursery == 2
+ assert ptr_stackroot_1.someInt == 100
+ assert ptr_stackroot_2.someInt == 100
+ py.test.raises(RuntimeError, 'ptr_not_stackroot.someInt') # should be
freed
+
def get_max_nursery_objects(self, TYPE):
typeid = self.get_type_id(TYPE)
size = self.gc.fixed_size(typeid) +
self.gc.gcheaderbuilder.size_gc_header
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit