[pypy-commit] pypy raw-memory-pressure-nursery: I think most modules now use the correct interface

fijal noreply at buildbot.pypy.org
Tue Feb 14 22:49:38 CET 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: raw-memory-pressure-nursery
Changeset: r52489:0385f8a3e803
Date: 2012-02-14 23:49 +0200
http://bitbucket.org/pypy/pypy/changeset/0385f8a3e803/

Log:	I think most modules now use the correct interface

diff --git a/pypy/module/_hashlib/interp_hashlib.py b/pypy/module/_hashlib/interp_hashlib.py
--- a/pypy/module/_hashlib/interp_hashlib.py
+++ b/pypy/module/_hashlib/interp_hashlib.py
@@ -23,6 +23,7 @@
     ctx = lltype.nullptr(ropenssl.EVP_MD_CTX.TO)
 
     def __init__(self, space, name):
+        rgc.add_memory_pressure(self, HASH_MALLOC_SIZE + self.digest_size)
         self.name = name
         digest_type = self.digest_type_by_name(space)
         self.digest_size = rffi.getintfield(digest_type, 'c_md_size')
@@ -33,7 +34,6 @@
         self.lock = Lock(space)
 
         ctx = lltype.malloc(ropenssl.EVP_MD_CTX.TO, flavor='raw')
-        rgc.add_memory_pressure(HASH_MALLOC_SIZE + self.digest_size)
         try:
             ropenssl.EVP_DigestInit(ctx, digest_type)
             self.ctx = ctx
diff --git a/pypy/module/_multiprocessing/interp_semaphore.py b/pypy/module/_multiprocessing/interp_semaphore.py
--- a/pypy/module/_multiprocessing/interp_semaphore.py
+++ b/pypy/module/_multiprocessing/interp_semaphore.py
@@ -208,7 +208,7 @@
 # don't forget to wrap them into OperationError
 
 if sys.platform == 'win32':
-    def create_semaphore(space, name, val, max):
+    def create_semaphore(space, self, name, val, max):
         rwin32.SetLastError(0)
         handle = _CreateSemaphore(rffi.NULL, val, max, rffi.NULL)
         # On Windows we should fail on ERROR_ALREADY_EXISTS
@@ -302,14 +302,14 @@
         return semlock_getvalue(self, space) == 0
 
 else:
-    def create_semaphore(space, name, val, max):
+    def create_semaphore(space, w_semaphore, name, val, max):
         sem = sem_open(name, os.O_CREAT | os.O_EXCL, 0600, val)
         try:
             sem_unlink(name)
         except OSError:
             pass
         else:
-            rgc.add_memory_pressure(SEM_T_SIZE)
+            rgc.add_memory_pressure(w_semaphore, SEM_T_SIZE)
         return sem
 
     def delete_semaphore(handle):
@@ -517,12 +517,12 @@
     counter = space.fromcache(CounterState).getCount()
     name = "/mp%d-%d" % (os.getpid(), counter)
 
+    self = space.allocate_instance(W_SemLock, w_subtype)
     try:
-        handle = create_semaphore(space, name, value, maxvalue)
+        handle = create_semaphore(space, self, name, value, maxvalue)
     except OSError, e:
         raise wrap_oserror(space, e)
 
-    self = space.allocate_instance(W_SemLock, w_subtype)
     self.__init__(handle, kind, maxvalue)
 
     return space.wrap(self)
diff --git a/pypy/module/_rawffi/interp_rawffi.py b/pypy/module/_rawffi/interp_rawffi.py
--- a/pypy/module/_rawffi/interp_rawffi.py
+++ b/pypy/module/_rawffi/interp_rawffi.py
@@ -7,6 +7,7 @@
 from pypy.rpython.lltypesystem import lltype, rffi
 from pypy.rlib.unroll import unrolling_iterable
 import pypy.rlib.rposix as rposix
+from pypy.rlib import rgc
 
 _MS_WINDOWS = os.name == "nt"
 
@@ -267,8 +268,9 @@
         if address:
             self.ll_buffer = rffi.cast(rffi.VOIDP, address)
         else:
+            rgc.add_memory_pressure(self, size)
             self.ll_buffer = lltype.malloc(rffi.VOIDP.TO, size, flavor='raw',
-                                           zero=True, add_memory_pressure=True)
+                                           zero=True)
             if tracker.DO_TRACING:
                 ll_buf = rffi.cast(lltype.Signed, self.ll_buffer)
                 tracker.trace_allocation(ll_buf, self)
diff --git a/pypy/module/array/interp_array.py b/pypy/module/array/interp_array.py
--- a/pypy/module/array/interp_array.py
+++ b/pypy/module/array/interp_array.py
@@ -12,7 +12,7 @@
 from pypy.rlib.rarithmetic import ovfcheck
 from pypy.rlib.unroll import unrolling_iterable
 from pypy.rpython.lltypesystem import lltype, rffi
-
+from pypy.rlib import rgc
 
 @unwrap_spec(typecode=str)
 def w_array(space, w_cls, typecode, __args__):
@@ -226,8 +226,8 @@
                     some += size >> 3
                     self.allocated = size + some
                     new_buffer = lltype.malloc(mytype.arraytype,
-                                               self.allocated, flavor='raw',
-                                               add_memory_pressure=True)
+                                               self.allocated, flavor='raw')
+                    rgc.add_memory_pressure(self, self.allocated * rffi.sizeof(mytype.arraytype.OF))
                     for i in range(min(size, self.len)):
                         new_buffer[i] = self.buffer[i]
                 else:
diff --git a/pypy/module/micronumpy/interp_dtype.py b/pypy/module/micronumpy/interp_dtype.py
--- a/pypy/module/micronumpy/interp_dtype.py
+++ b/pypy/module/micronumpy/interp_dtype.py
@@ -7,7 +7,7 @@
 from pypy.rlib.objectmodel import specialize
 from pypy.rlib.rarithmetic import LONG_BIT
 from pypy.rpython.lltypesystem import lltype, rffi
-
+from pypy.rlib import rgc
 
 UNSIGNEDLTR = "u"
 SIGNEDLTR = "i"
@@ -30,12 +30,12 @@
         self.alternate_constructors = alternate_constructors
         self.aliases = aliases
 
-    def malloc(self, length):
+    def malloc(self, array, length):
         # XXX find out why test_zjit explodes with tracking of allocations
-        return lltype.malloc(VOID_STORAGE, self.itemtype.get_element_size() * length,
-            zero=True, flavor="raw",
-            track_allocation=False, add_memory_pressure=True
-        )
+        size = self.itemtype.get_element_size() * length
+        rgc.add_memory_pressure(array, size)
+        return lltype.malloc(VOID_STORAGE, size, zero=True, flavor="raw",
+                             track_allocation=False)
 
     @specialize.argtype(1)
     def box(self, value):
diff --git a/pypy/module/micronumpy/interp_numarray.py b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -903,7 +903,7 @@
         if parent is not None:
             self.storage = parent.storage
         else:
-            self.storage = dtype.malloc(size)
+            self.storage = dtype.malloc(self, size)
         self.order = order
         self.dtype = dtype
         if self.strides is None:
diff --git a/pypy/module/micronumpy/test/test_numarray.py b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -11,7 +11,7 @@
 
 
 class MockDtype(object):
-    def malloc(self, size):
+    def malloc(self, array, size):
         return None
 
 
diff --git a/pypy/module/pyexpat/interp_pyexpat.py b/pypy/module/pyexpat/interp_pyexpat.py
--- a/pypy/module/pyexpat/interp_pyexpat.py
+++ b/pypy/module/pyexpat/interp_pyexpat.py
@@ -407,6 +407,7 @@
 class W_XMLParserType(Wrappable):
 
     def __init__(self, space, parser, w_intern):
+        rgc.add_memory_pressure(XML_Parser_SIZE + 300)
         self.itself = parser
 
         self.w_intern = w_intern
@@ -824,7 +825,6 @@
     # Currently this is just the size of the pointer and some estimated bytes.
     # The struct isn't actually defined in expat.h - it is in xmlparse.c
     # XXX: find a good estimate of the XML_ParserStruct
-    rgc.add_memory_pressure(XML_Parser_SIZE + 300)
     if not xmlparser:
         raise OperationError(space.w_RuntimeError,
                              space.wrap('XML_ParserCreate failed'))
diff --git a/pypy/module/thread/ll_thread.py b/pypy/module/thread/ll_thread.py
--- a/pypy/module/thread/ll_thread.py
+++ b/pypy/module/thread/ll_thread.py
@@ -4,7 +4,7 @@
 import py
 from pypy.rlib import jit, rgc
 from pypy.rlib.debug import ll_assert
-from pypy.rlib.objectmodel import we_are_translated, specialize
+from pypy.rlib.objectmodel import we_are_translated, specialize, instantiate
 from pypy.rpython.lltypesystem.lloperation import llop
 from pypy.rpython.tool import rffi_platform
 from pypy.tool import autopath
@@ -83,7 +83,10 @@
                               _nowrapper=True)
 
 def allocate_lock():
-    return Lock(allocate_ll_lock())
+    lock = instantiate(Lock)
+    ll_lock = allocate_ll_lock(lock)
+    lock.__init__(lock, ll_lock)
+    return lock
 
 @specialize.arg(0)
 def ll_start_new_thread(func):


More information about the pypy-commit mailing list