[pypy-commit] pypy remove-globals-in-jit: Backed out changeset 4ed15aefc3f0: the jit frames are still in the C stack,

arigo noreply at buildbot.pypy.org
Mon Dec 3 18:19:32 CET 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: remove-globals-in-jit
Changeset: r59294:2433a3c3072c
Date: 2012-12-03 09:19 -0800
http://bitbucket.org/pypy/pypy/changeset/2433a3c3072c/

Log:	Backed out changeset 4ed15aefc3f0: the jit frames are still in the C
	stack, so it really solves nothing apart from maybe one bug case.

diff --git a/pypy/module/_continuation/interp_continuation.py b/pypy/module/_continuation/interp_continuation.py
--- a/pypy/module/_continuation/interp_continuation.py
+++ b/pypy/module/_continuation/interp_continuation.py
@@ -34,6 +34,7 @@
         if self.sthread is not None:
             raise geterror(self.space, "continulet already __init__ialized")
         sthread = build_sthread(self.space)
+        workaround_disable_jit(sthread)
         #
         # hackish: build the frame "by hand", passing it the correct arguments
         space = self.space
@@ -76,6 +77,7 @@
                 global_state.clear()
                 raise geterror(self.space, "continulet already finished")
         self.check_sthread()
+        workaround_disable_jit(self.sthread)
         #
         global_state.origin = self
         if to is None:
@@ -269,6 +271,16 @@
         sthread = ec.stacklet_thread = SThread(space, ec)
     return sthread
 
+def workaround_disable_jit(sthread):
+    # A bad workaround to kill the JIT anywhere in this thread.
+    # This forces all the frames.  It's a bad workaround because
+    # it takes O(depth) time, and it will cause some "abort:
+    # vable escape" in the JIT.  The goal is to prevent any frame
+    # from being still virtuals, because the JIT generates code
+    # to un-virtualizable them "on demand" by loading values based
+    # on FORCE_TOKEN, which is an address in the stack.
+    sthread.ec.force_all_frames()
+
 # ____________________________________________________________
 
 def permute(space, args_w):


More information about the pypy-commit mailing list