[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