remove kludgey duplicate background error avoidance (caused
[p5sagit/p5-mst-13.2.git] / scope.c
diff --git a/scope.c b/scope.c
index f87689e..8952f43 100644 (file)
--- a/scope.c
+++ b/scope.c
 void *
 Perl_default_protect(pTHX_ int *excpt, protect_body_t body, ...)
 {
+    void *ret;
+    va_list args;
+    va_start(args, body);
+    ret = vdefault_protect(excpt, body, &args);
+    va_end(args);
+    return ret;
+}
+
+void *
+Perl_vdefault_protect(pTHX_ int *excpt, protect_body_t body, va_list *args)
+{
     dTHR;
     dJMPENV;
-    va_list args;
     int ex;
     void *ret;
 
@@ -30,11 +40,8 @@ Perl_default_protect(pTHX_ int *excpt, protect_body_t body, ...)
     JMPENV_PUSH(ex);
     if (ex)
        ret = NULL;
-    else {
-       va_start(args, body);
-       ret = CALL_FPTR(body)(aTHX_ args);
-       va_end(args);
-    }
+    else
+       ret = CALL_FPTR(body)(aTHX_ *args);
     *excpt = ex;
     JMPENV_POP;
     return ret;
@@ -430,7 +437,7 @@ Perl_save_threadsv(pTHX_ PADOFFSET i)
 #ifdef USE_THREADS
     dTHR;
     SV **svp = &THREADSV(i);   /* XXX Change to save by offset */
-    DEBUG_S(PerlIO_printf(PerlIO_stderr(), "save_threadsv %u: %p %p:%s\n",
+    DEBUG_S(PerlIO_printf(Perl_debug_log, "save_threadsv %u: %p %p:%s\n",
                          i, svp, *svp, SvPEEK(*svp)));
     save_svref(svp);
     return svp;
@@ -639,7 +646,7 @@ Perl_leave_scope(pTHX_ I32 base)
            ptr = SSPOPPTR;
        restore_sv:
            sv = *(SV**)ptr;
-           DEBUG_S(PerlIO_printf(PerlIO_stderr(),
+           DEBUG_S(PerlIO_printf(Perl_debug_log,
                                  "restore svref: %p %p:%s -> %p:%s\n",
                                  ptr, sv, SvPEEK(sv), value, SvPEEK(value)));
            if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv) &&
@@ -824,7 +831,7 @@ Perl_leave_scope(pTHX_ I32 base)
            break;
        case SAVEt_DESTRUCTOR:
            ptr = SSPOPPTR;
-           CALLDESTRUCTOR(aTHX_ ptr);
+           CALLDESTRUCTOR(aTHXo_ ptr);
            break;
        case SAVEt_REGCONTEXT:
        case SAVEt_ALLOC: