[pypy-commit] pypy gc-del: Fixes. Now an -O2 translates :-)
arigo
noreply at buildbot.pypy.org
Sat Apr 27 09:01:06 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: gc-del
Changeset: r63674:1a9bed8849c5
Date: 2013-04-27 09:03 +0200
http://bitbucket.org/pypy/pypy/changeset/1a9bed8849c5/
Log: Fixes. Now an -O2 translates :-)
diff --git a/pypy/module/_multibytecodec/interp_incremental.py b/pypy/module/_multibytecodec/interp_incremental.py
--- a/pypy/module/_multibytecodec/interp_incremental.py
+++ b/pypy/module/_multibytecodec/interp_incremental.py
@@ -21,9 +21,6 @@
self.name = codec.name
self._initialize()
- def __del__(self):
- self._free()
-
def reset_w(self):
self._free()
self._initialize()
@@ -36,13 +33,14 @@
class MultibyteIncrementalDecoder(MultibyteIncrementalBase):
+ def __del__(self):
+ self._free()
def _initialize(self):
self.decodebuf = c_codecs.pypy_cjk_dec_new(self.codec)
self.pending = ""
def _free(self):
- self.pending = None
if self.decodebuf:
c_codecs.pypy_cjk_dec_free(self.decodebuf)
self.decodebuf = lltype.nullptr(c_codecs.DECODEBUF_P.TO)
@@ -85,13 +83,14 @@
class MultibyteIncrementalEncoder(MultibyteIncrementalBase):
+ def __del__(self):
+ self._free()
def _initialize(self):
self.encodebuf = c_codecs.pypy_cjk_enc_new(self.codec)
self.pending = u""
def _free(self):
- self.pending = None
if self.encodebuf:
c_codecs.pypy_cjk_enc_free(self.encodebuf)
self.encodebuf = lltype.nullptr(c_codecs.ENCODEBUF_P.TO)
diff --git a/pypy/module/_rawffi/callback.py b/pypy/module/_rawffi/callback.py
--- a/pypy/module/_rawffi/callback.py
+++ b/pypy/module/_rawffi/callback.py
@@ -72,12 +72,12 @@
except LibFFIError:
raise got_libffi_error(space)
self.ll_buffer = rffi.cast(rffi.VOIDP, self.ll_callback.ll_closure)
- if tracker.DO_TRACING:
+ if tracker.do_tracing():
addr = rffi.cast(lltype.Signed, self.ll_callback.ll_closure)
tracker.trace_allocation(addr, self)
def free(self):
- if tracker.DO_TRACING:
+ if tracker.do_tracing():
addr = rffi.cast(lltype.Signed, self.ll_callback.ll_closure)
tracker.trace_free(addr)
global_counter.remove(self.number)
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
@@ -277,7 +277,7 @@
else:
self.ll_buffer = lltype.malloc(rffi.VOIDP.TO, size, flavor='raw',
zero=True, add_memory_pressure=True)
- if tracker.DO_TRACING:
+ if tracker.do_tracing():
ll_buf = rffi.cast(lltype.Signed, self.ll_buffer)
tracker.trace_allocation(ll_buf, self)
@@ -296,7 +296,7 @@
self._free()
def _free(self):
- if tracker.DO_TRACING:
+ if tracker.do_tracing():
ll_buf = rffi.cast(lltype.Signed, self.ll_buffer)
tracker.trace_free(ll_buf)
lltype.free(self.ll_buffer, flavor='raw')
@@ -392,7 +392,7 @@
from pypy.module._rawffi.array import ARRAY_OF_PTRS
array = ARRAY_OF_PTRS.allocate(space, 1)
array.setitem(space, 0, self.getbuffer(space))
- if tracker.DO_TRACING:
+ if tracker.do_tracing():
# XXX this is needed, because functions tend to live forever
# hence our testing is not performing that well
del tracker.alloced[rffi.cast(lltype.Signed, array.ll_buffer)]
diff --git a/pypy/module/_rawffi/tracker.py b/pypy/module/_rawffi/tracker.py
--- a/pypy/module/_rawffi/tracker.py
+++ b/pypy/module/_rawffi/tracker.py
@@ -2,6 +2,8 @@
""" The file that keeps track about freed/kept-alive objects allocated
by _rawffi. Used for debugging ctypes
"""
+from rpython.rlib.objectmodel import we_are_translated
+
class Tracker(object):
DO_TRACING = True
@@ -9,12 +11,17 @@
def __init__(self):
self.alloced = {}
+ def do_tracing(self):
+ return not we_are_translated() and self.DO_TRACING
+
def trace_allocation(self, address, obj):
- self.alloced[address] = None
+ if not we_are_translated():
+ self.alloced[address] = None
def trace_free(self, address):
- if address in self.alloced:
- del self.alloced[address]
+ if not we_are_translated():
+ if address in self.alloced:
+ del self.alloced[address]
# single, global, static object to keep all tracker info
tracker = Tracker()
More information about the pypy-commit
mailing list