[pypy-commit] pypy default: Tentative fix for the AssertionError in
arigo
noreply at buildbot.pypy.org
Sun Jun 5 15:10:24 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r44717:116ea27fcf70
Date: 2011-06-05 15:10 +0200
http://bitbucket.org/pypy/pypy/changeset/116ea27fcf70/
Log: Tentative fix for the AssertionError in
ResumeGuardForcedDescr_fetch_data that shows up in a couple of lib-
python tests. They seem to be related to out-of-stack situations.
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -4,6 +4,7 @@
from pypy.objspace.flow.model import Constant, Variable
from pypy.rlib.objectmodel import we_are_translated
from pypy.rlib.debug import debug_start, debug_stop
+from pypy.rlib import rstack
from pypy.conftest import option
from pypy.tool.sourcetools import func_with_new_name
@@ -452,9 +453,17 @@
# Called during a residual call from the assembler, if the code
# actually needs to force one of the virtualrefs or the virtualizable.
# Implemented by forcing *all* virtualrefs and the virtualizable.
- faildescr = cpu.force(token)
- assert isinstance(faildescr, ResumeGuardForcedDescr)
- faildescr.handle_async_forcing(token)
+
+ # don't interrupt me! If the stack runs out in force_from_resumedata()
+ # then we have seen cpu.force() but not self.save_data(), leaving in
+ # an inconsistent state
+ rstack._stack_criticalcode_start()
+ try:
+ faildescr = cpu.force(token)
+ assert isinstance(faildescr, ResumeGuardForcedDescr)
+ faildescr.handle_async_forcing(token)
+ finally:
+ rstack._stack_criticalcode_stop()
def handle_async_forcing(self, force_token):
from pypy.jit.metainterp.resume import force_from_resumedata
More information about the pypy-commit
mailing list