[pypy-commit] pypy raw-memory-pressure-nursery: The proper voodoo dance to have it work untranslated.

arigo noreply at buildbot.pypy.org
Tue Feb 14 19:51:06 CET 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: raw-memory-pressure-nursery
Changeset: r52470:e4a336273b9f
Date: 2012-02-14 19:50 +0100
http://bitbucket.org/pypy/pypy/changeset/e4a336273b9f/

Log:	The proper voodoo dance to have it work untranslated. The test still
	fails but for a good reason now.

diff --git a/pypy/rpython/memory/gc/minimark.py b/pypy/rpython/memory/gc/minimark.py
--- a/pypy/rpython/memory/gc/minimark.py
+++ b/pypy/rpython/memory/gc/minimark.py
@@ -740,11 +740,16 @@
 
     def raw_malloc_memory_pressure(self, obj, sizehint):
         size = self.get_size(obj)
+        obj = llarena.getfakearenaaddress(obj)
         if obj + size == self.nursery_free:
-            sizehint = llarena.round_up_for_allocation(sizehint, WORD)
+            sizehint = llarena.round_up_for_allocation(
+                sizehint, llmemory.sizeof(lltype.Signed))
+            sizehint = llmemory.raw_malloc_usage(sizehint)
             if (self.nursery_top - self.nursery_free) < sizehint:
                 self.nursery_free = self.nursery_top
             else:
+                llarena.arena_reserve(self.nursery_free,
+                                      llmemory.sizeof(lltype.Signed))
                 self.nursery_free.signed[0] = sizehint
                 self.header(obj).tid |= GCFLAG_OWNS_RAW_MEMORY
                 self.nursery_free += sizehint
diff --git a/pypy/rpython/memory/gc/test/test_direct.py b/pypy/rpython/memory/gc/test/test_direct.py
--- a/pypy/rpython/memory/gc/test/test_direct.py
+++ b/pypy/rpython/memory/gc/test/test_direct.py
@@ -596,11 +596,12 @@
     def test_memory_pressure(self):
         obj = self.malloc(S)
         nursery_size = self.gc.nursery_size
+        BYTE = llmemory.sizeof(lltype.Char)
         self.gc.raw_malloc_memory_pressure(llmemory.cast_ptr_to_adr(obj),
-                                           nursery_size / 2)
+                                           BYTE * (nursery_size / 2))
         obj2 = self.malloc(S)
         self.gc.raw_malloc_memory_pressure(llmemory.cast_ptr_to_adr(obj2),
-                                           nursery_size / 2)
+                                           BYTE * (nursery_size / 2))
         # obj should be dead by now
         assert self.gc.nursery_free == self.gc.nursery        
 


More information about the pypy-commit mailing list