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

Reply via email to