[pypy-commit] pypy default: Fix: this opaque pointer dance is only for gc references. This fixes
arigo
noreply at buildbot.pypy.org
Thu May 12 14:38:26 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r44099:176802d75314
Date: 2011-05-12 14:46 +0200
http://bitbucket.org/pypy/pypy/changeset/176802d75314/
Log: Fix: this opaque pointer dance is only for gc references. This
fixes test_rsocket, which takes pointers to individual bytes in a
non-gc structure, ending up at odd-valued addresses.
diff --git a/pypy/rpython/lltypesystem/ll2ctypes.py b/pypy/rpython/lltypesystem/ll2ctypes.py
--- a/pypy/rpython/lltypesystem/ll2ctypes.py
+++ b/pypy/rpython/lltypesystem/ll2ctypes.py
@@ -616,7 +616,7 @@
container = llobj._obj.container
T = lltype.Ptr(lltype.typeOf(container))
# otherwise it came from integer and we want a c_void_p with
- # the same valu
+ # the same value
if getattr(container, 'llopaque', None):
no = len(_opaque_objs)
_opaque_objs.append(container)
@@ -774,7 +774,7 @@
# CFunctionType.__nonzero__ is broken before Python 2.6
return lltype.nullptr(T.TO)
if isinstance(T.TO, lltype.Struct):
- if ptrval & 1: # a tagged pointer
+ if T.TO._gckind == 'gc' and ptrval & 1: # a tagged pointer
gcref = _opaque_objs[ptrval // 2].hide()
return lltype.cast_opaque_ptr(T, gcref)
REAL_TYPE = T.TO
More information about the pypy-commit
mailing list