Armin Rigo  committed 2433a3c

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

  • Participants
  • Parent commits 4ed15ae
  • Branches remove-globals-in-jit

Comments (0)

Files changed (1)

File pypy/module/_continuation/

         if self.sthread is not None:
             raise geterror(, "continulet already __init__ialized")
         sthread = build_sthread(
+        workaround_disable_jit(sthread)
         # hackish: build the frame "by hand", passing it the correct arguments
         space =
                 raise geterror(, "continulet already finished")
+        workaround_disable_jit(self.sthread)
         global_state.origin = self
         if to is None:
         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.
 # ____________________________________________________________
 def permute(space, args_w):