[pypy-commit] pypy gc-incminimark-pinning-countlimit: Merge gc-incminimark-pinning into gc-incminimark-pinning-countlimit

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


Author: Gregor Wegberg <code at gregorwegberg.com>
Branch: gc-incminimark-pinning-countlimit
Changeset: r71857:4402a3db123d
Date: 2014-05-29 19:30 +0200
http://bitbucket.org/pypy/pypy/changeset/4402a3db123d/

Log:	Merge gc-incminimark-pinning into gc-incminimark-pinning-countlimit

diff --git a/rpython/memory/gc/incminimark.py b/rpython/memory/gc/incminimark.py
--- a/rpython/memory/gc/incminimark.py
+++ b/rpython/memory/gc/incminimark.py
@@ -756,7 +756,7 @@
                                 # object
                                 pass
                 else:
-                    ll_assert(minor_collection_count >= 1,
+                    ll_assert(minor_collection_count < 1,
                         "Seeing minor_collection() at least twice. "
                         "Too many pinned objects?")
             #
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_full_pinned_nursery_pin_fail(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