X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=doio.c;h=6f62144c4e775966dca635a267d677f36c8a3040;hb=21fff32650ffc8719558f625ca6c5cc49a442d92;hp=c3d6f50715557bc32cfa461557b6d8e1f4e5e9be;hpb=6c85703cf9eae156b03f18186f39b571bd208c32;p=p5sagit%2Fp5-mst-13.2.git diff --git a/doio.c b/doio.c index c3d6f50..6f62144 100644 --- a/doio.c +++ b/doio.c @@ -476,13 +476,13 @@ Perl_do_open9(pTHX_ GV *gv, register char *name, I32 len, int as_raw, SV *sv; PerlLIO_dup2(PerlIO_fileno(fp), fd); - FDPID_LOCK(); + MUTEX_LOCK(&PL_fdpid_mutex); sv = *av_fetch(PL_fdpid,PerlIO_fileno(fp),TRUE); (void)SvUPGRADE(sv, SVt_IV); pid = SvIVX(sv); SvIVX(sv) = 0; sv = *av_fetch(PL_fdpid,fd,TRUE); - FDPID_UNLOCK(); + MUTEX_UNLOCK(&PL_fdpid_mutex); (void)SvUPGRADE(sv, SVt_IV); SvIVX(sv) = pid; if (!was_fdopen) @@ -504,8 +504,8 @@ Perl_do_open9(pTHX_ GV *gv, register char *name, I32 len, int as_raw, IoFLAGS(io) &= ~IOf_NOLINE; if (writing) { dTHR; - if (IoTYPE(io) == 's' - || (IoTYPE(io) == '>' && S_ISCHR(PL_statbuf.st_mode)) ) + bool is_reg = IoTYPE(io) == '>' && S_ISCHR(PL_statbuf.st_mode); + if (IoTYPE(io) == 's' || is_reg) { char *mode; if (out_raw) @@ -520,6 +520,10 @@ Perl_do_open9(pTHX_ GV *gv, register char *name, I32 len, int as_raw, IoIFP(io) = Nullfp; goto say_false; } + else { + if (is_reg) + IoIFP(io) = IoOFP(io); /* avoid double close() */ + } } else IoOFP(io) = fp;