Author: Armin Rigo <[email protected]>
Branch: reverse-debugger
Changeset: r91969:a24d6c7000c8
Date: 2017-07-25 17:58 +0200
http://bitbucket.org/pypy/pypy/changeset/a24d6c7000c8/
Log: Fix for edc44ccff552: the previous fix in clibffi had no effect
diff --git a/rpython/memory/gctransform/support.py
b/rpython/memory/gctransform/support.py
--- a/rpython/memory/gctransform/support.py
+++ b/rpython/memory/gctransform/support.py
@@ -1,4 +1,5 @@
from rpython.rtyper.lltypesystem import lltype
+from rpython.rtyper.lltypesystem.lloperation import llop
from rpython.rtyper.extregistry import ExtRegistryEntry
from rpython.annotator import model as annmodel
import os
@@ -77,23 +78,19 @@
from rpython.rlib.rposix import c_write
return c_write(fd, string, len(string))
-def destructor_failed(typename, e):
- try:
- write(2, "a destructor of type ")
- write(2, typename)
- write(2, " raised an exception ")
- write(2, str(e))
- write(2, " ignoring it\n")
- except:
- pass
-destructor_failed._dont_inline_ = True
-
def ll_call_destructor(destrptr, destr_v, typename):
+ llop.revdb_do_next_call(lltype.Void)
try:
destrptr(destr_v)
except Exception as e:
- destructor_failed(typename, e)
-ll_call_destructor._revdb_do_all_calls_ = True
+ try:
+ write(2, "a destructor of type ")
+ write(2, typename)
+ write(2, " raised an exception ")
+ write(2, str(e))
+ write(2, " ignoring it\n")
+ except:
+ pass
def ll_report_finalizer_error(e):
try:
diff --git a/rpython/rlib/clibffi.py b/rpython/rlib/clibffi.py
--- a/rpython/rlib/clibffi.py
+++ b/rpython/rlib/clibffi.py
@@ -4,6 +4,7 @@
from rpython.rtyper.tool import rffi_platform
from rpython.rtyper.lltypesystem import lltype, rffi
+from rpython.rtyper.lltypesystem.lloperation import llop
from rpython.rtyper.tool import rffi_platform
from rpython.rlib.unroll import unrolling_iterable
from rpython.rlib.rarithmetic import intmask, is_emulated_long
@@ -419,8 +420,8 @@
(what the real callback is for example), casted to VOIDP
"""
userdata = rffi.cast(USERDATA_P, ll_userdata)
+ llop.revdb_do_next_call(lltype.Void)
userdata.callback(ll_args, ll_res, userdata)
-_ll_callback._revdb_do_all_calls_ = True
def ll_callback(ffi_cif, ll_res, ll_args, ll_userdata):
rposix._errno_after(rffi.RFFI_ERR_ALL | rffi.RFFI_ALT_ERRNO)
diff --git a/rpython/rtyper/lltypesystem/lloperation.py
b/rpython/rtyper/lltypesystem/lloperation.py
--- a/rpython/rtyper/lltypesystem/lloperation.py
+++ b/rpython/rtyper/lltypesystem/lloperation.py
@@ -593,6 +593,7 @@
'revdb_dtoa': LLOp(sideeffects=False),
'revdb_modf': LLOp(sideeffects=False),
'revdb_frexp': LLOp(sideeffects=False),
+ 'revdb_do_next_call': LLOp(),
}
# ***** Run test_lloperation after changes. *****
diff --git a/rpython/translator/c/funcgen.py b/rpython/translator/c/funcgen.py
--- a/rpython/translator/c/funcgen.py
+++ b/rpython/translator/c/funcgen.py
@@ -713,6 +713,10 @@
return gencsupp.cast_gcptr_to_int(self, op)
return self.OP_CAST_POINTER(op)
+ def OP_REVDB_DO_NEXT_CALL(self, op):
+ self.revdb_do_next_call = True
+ return "/* revdb_do_next_call */"
+
def OP_LENGTH_OF_SIMPLE_GCARRAY_FROM_OPAQUE(self, op):
return ('%s = *(long *)(((char *)%s) + sizeof(struct pypy_header0));'
' /* length_of_simple_gcarray_from_opaque */'
diff --git a/rpython/translator/revdb/gencsupp.py
b/rpython/translator/revdb/gencsupp.py
--- a/rpython/translator/revdb/gencsupp.py
+++ b/rpython/translator/revdb/gencsupp.py
@@ -78,10 +78,11 @@
return 'RPY_REVDB_EMIT(%s, %s, %s);' % (normal_code, cdecl(tp, '_e'),
value)
def emit_residual_call(funcgen, call_code, v_result, expr_result):
- if getattr(getattr(funcgen.graph, 'func', None),
- '_revdb_do_all_calls_', False):
+ if hasattr(funcgen, 'revdb_do_next_call'):
+ del funcgen.revdb_do_next_call
return call_code # a hack for ll_call_destructor() to mean
- # that the calls should really be done
+ # that the calls should really be done.
+ # Also used in rpython.rlib.clibffi.
#
if call_code in ('RPyGilAcquire();', 'RPyGilRelease();'):
# Could also work with a regular RPY_REVDB_CALL_VOID, but we
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit