[pypy-commit] pypy default: Test and fix for unicode_dealloc().
arigo
pypy.commits at gmail.com
Tue Apr 26 15:08:50 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r83917:5c74afbd7d74
Date: 2016-04-26 21:07 +0200
http://bitbucket.org/pypy/pypy/changeset/5c74afbd7d74/
Log: Test and fix for unicode_dealloc().
diff --git a/pypy/module/cpyext/object.py b/pypy/module/cpyext/object.py
--- a/pypy/module/cpyext/object.py
+++ b/pypy/module/cpyext/object.py
@@ -48,6 +48,9 @@
@cpython_api([PyObject], lltype.Void)
def PyObject_dealloc(space, obj):
+ # This frees an object after its refcount dropped to zero, so we
+ # assert that it is really zero here.
+ assert obj.c_ob_refcnt == 0
pto = obj.c_ob_type
obj_voidp = rffi.cast(rffi.VOIDP, obj)
generic_cpy_call(space, pto.c_tp_free, obj_voidp)
diff --git a/pypy/module/cpyext/unicodeobject.py b/pypy/module/cpyext/unicodeobject.py
--- a/pypy/module/cpyext/unicodeobject.py
+++ b/pypy/module/cpyext/unicodeobject.py
@@ -85,11 +85,10 @@
@cpython_api([PyObject], lltype.Void, header=None)
def unicode_dealloc(space, py_obj):
py_unicode = rffi.cast(PyUnicodeObject, py_obj)
+ Py_DecRef(space, py_unicode.c_defenc)
if py_unicode.c_str:
lltype.free(py_unicode.c_str, flavor="raw")
from pypy.module.cpyext.object import PyObject_dealloc
- if py_unicode.c_defenc:
- PyObject_dealloc(space, py_unicode.c_defenc)
PyObject_dealloc(space, py_obj)
@cpython_api([Py_UNICODE], rffi.INT_real, error=CANNOT_FAIL)
More information about the pypy-commit
mailing list