tweak change#4502
Gurusamy Sarathy [Mon, 8 Nov 1999 04:17:28 +0000 (04:17 +0000)]
p4raw-link: @4502 on //depot/perl: 18708f5a7334d978ddf7562cb7f58e28bec6e4ed

p4raw-id: //depot/perl@4535

doio.c
perl.c

diff --git a/doio.c b/doio.c
index b340ec6..16cff29 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -490,8 +490,11 @@ Perl_nextargv(pTHX_ register GV *gv)
        PL_argvoutgv = gv_fetchpv("ARGVOUT",TRUE,SVt_PVIO);
     if (io && (IoFLAGS(io) & IOf_ARGV) && (IoFLAGS(io) & IOf_START)) {
        IoFLAGS(io) &= ~IOf_START;
-       if (PL_inplace)
+       if (PL_inplace) {
+           if (!PL_argvout_stack)
+               PL_argvout_stack = newAV();
            av_push(PL_argvout_stack, SvREFCNT_inc(PL_defoutgv));
+       }
     }
     if (PL_filemode & (S_ISUID|S_ISGID)) {
        PerlIO_flush(IoIFP(GvIOn(PL_argvoutgv)));  /* chmod must follow last write */
@@ -668,7 +671,9 @@ Perl_nextargv(pTHX_ register GV *gv)
        IoFLAGS(io) |= IOf_START;
     if (PL_inplace) {
        (void)do_close(PL_argvoutgv,FALSE);
-       if (io && (IoFLAGS(io) & IOf_ARGV) && AvFILLp(PL_argvout_stack) >= 0) {
+       if (io && (IoFLAGS(io) & IOf_ARGV)
+           && PL_argvout_stack && AvFILLp(PL_argvout_stack) >= 0)
+       {
            GV *oldout = (GV*)av_pop(PL_argvout_stack);
            setdefout(oldout);
            SvREFCNT_dec(oldout);
diff --git a/perl.c b/perl.c
index 6e907eb..929fef1 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -454,6 +454,8 @@ perl_destruct(pTHXx)
 
     /* reset so print() ends up where we expect */
     setdefout(Nullgv);
+    SvREFCNT_dec(PL_argvout_stack);
+    PL_argvout_stack = Nullav;
 
     /* Prepare to destruct main symbol table.  */
 
@@ -2771,7 +2773,6 @@ S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register
        for (; argc > 0; argc--,argv++) {
            av_push(GvAVn(PL_argvgv),newSVpv(argv[0],0));
        }
-       PL_argvout_stack = newAV();
     }
     if (PL_envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV)) {
        HV *hv;