[pypy-commit] pypy gc-incminimark-pinning: add failing test for full nursery with pinned objects (should assert)

groggi noreply at buildbot.pypy.org
Mon Jun 2 17:24:43 CEST 2014


Author: Gregor Wegberg <code at gregorwegberg.com>
Branch: gc-incminimark-pinning
Changeset: r71854:d2c02b0d48d0
Date: 2014-05-29 19:27 +0200
http://bitbucket.org/pypy/pypy/changeset/d2c02b0d48d0/

Log:	add failing test for full nursery with pinned objects (should
	assert)

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,24 @@
         assert self.gc.nursery_free == self.gc.nursery
         assert self.gc.nursery_top > self.gc.nursery
 
+    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
+        raw_size = llmemory.raw_malloc_usage(size)
+        return self.gc.nursery_size // raw_size
+
+    def test_pin_until_full(self):
+        object_mallocs = self.get_max_nursery_objects(S)
+        for instance_nr in xrange(object_mallocs):
+            ptr = self.malloc(S)
+            adr = llmemory.cast_ptr_to_adr(ptr)
+            ptr.someInt = 100 + instance_nr
+            self.stackroots.append(ptr)
+            self.gc.pin(adr)
+        # nursery should be full now, at least no space for another `S`. Next malloc should fail.
+        py.test.raises(Exception, self.malloc, S)
+
+
     # XXX test/define what happens if we try to pin an object that is too
     # big for the nursery and will be raw-malloc'ed.
 


More information about the pypy-commit mailing list