]> git.vpit.fr Git - perl/modules/Variable-Magic.git/commitdiff
Store the last popped stack index for after call_sv()
authorVincent Pit <vince@profvince.com>
Mon, 27 Apr 2009 20:37:28 +0000 (22:37 +0200)
committerVincent Pit <vince@profvince.com>
Mon, 27 Apr 2009 20:37:28 +0000 (22:37 +0200)
This also silences a compilation warning for cxinc().

Magic.xs

index c925143a4eb8979ac0f225e14a1363ef67f392e9..218819f909fe653162f5c6bfec622cea11d9f3ea 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -814,6 +814,7 @@ STATIC int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) {
  const MGWIZ *w;
 #if VMG_HAS_PERL(5, 10, 0)
  PERL_CONTEXT saved_cx;
+ I32 cxix;
 #endif
  unsigned int had_err, has_err, flags = G_SCALAR | G_EVAL;
  int ret = 0;
@@ -856,15 +857,17 @@ STATIC int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) {
  /* This context should not be used anymore, but since we croak in places the
   * core doesn't even dare to, some pointers to it may remain in the upper call
   * stack. Make sure call_sv() doesn't clobber it. */
- if (cxstack_ix >= cxstack_max)
-  Perl_cxinc(aTHX);
- saved_cx = cxstack[cxstack_ix + 1];
+ if (cxstack_ix < cxstack_max)
+  cxix = cxstack_ix + 1;
+ else
+  cxix = Perl_cxinc(aTHX);
+ saved_cx = cxstack[cxix];
 #endif
 
  call_sv(w->cb_free, flags);
 
 #if VMG_HAS_PERL(5, 10, 0)
- cxstack[cxstack_ix + 1] = saved_cx;
+ cxstack[cxix] = saved_cx;
 #endif
 
  has_err = SvTRUE(ERRSV);