]> git.vpit.fr Git - perl/modules/Scope-Upper.git/blobdiff - Upper.xs
Update the comment about the "call_sv() during LEAVE" workaround
[perl/modules/Scope-Upper.git] / Upper.xs
index 5e8e8e396302ee3ebf951f08f50927765c0c1247..fa117d97ba7de9090a12afb407df657f15e239ca 100644 (file)
--- a/Upper.xs
+++ b/Upper.xs
@@ -277,7 +277,7 @@ typedef struct {
 
 STATIC void su_call(pTHX_ void *ud_) {
  su_ud_reap *ud = (su_ud_reap *) ud_;
-#if SU_HAS_PERL(5, 10, 0)
+#if SU_HAS_PERL(5, 9, 5)
  PERL_CONTEXT saved_cx;
  I32 dieing = PL_op->op_type == OP_DIE;
  I32 cxix;
@@ -293,10 +293,10 @@ STATIC void su_call(pTHX_ void *ud_) {
  PUSHMARK(SP);
  PUTBACK;
 
- /* If cxstack_ix isn't incremented there, the eval context will be overwritten
-  * when the new sub scope will be created in call_sv. */
+ /* If the recently popped context isn't saved there, it will be overwritten by
+  * the sub scope from call_sv, although it's still needed in our caller. */
 
-#if SU_HAS_PERL(5, 10, 0)
+#if SU_HAS_PERL(5, 9, 5)
  if (dieing) {
   if (cxstack_ix < cxstack_max)
    cxix = cxstack_ix + 1;
@@ -308,7 +308,7 @@ STATIC void su_call(pTHX_ void *ud_) {
 
  call_sv(ud->cb, G_VOID);
 
-#if SU_HAS_PERL(5, 10, 0)
+#if SU_HAS_PERL(5, 9, 5)
  if (dieing)
   cxstack[cxix] = saved_cx;
 #endif
@@ -720,7 +720,8 @@ BOOT:
  HV *stash;
  MY_CXT_INIT;
  stash = gv_stashpv(__PACKAGE__, 1);
- newCONSTSUB(stash, "TOP", newSViv(0));
+ newCONSTSUB(stash, "TOP",           newSViv(0));
+ newCONSTSUB(stash, "SU_THREADSAFE", newSVuv(SU_THREADSAFE));
  newXSproto("Scope::Upper::unwind", XS_Scope__Upper_unwind, file, NULL);
 }