status = FAIL;
if (sp > mark)
{
- dTHR;
- New(401,PL_Argv, sp - mark + 1, char*);
+ Newx(PL_Argv, sp - mark + 1, char*);
a = PL_Argv;
while (++mark <= sp)
{
/* be used by my_pclose */
/*---------------------------------------------*/
close(fd);
+ MUTEX_LOCK(&PL_fdpid_mutex);
p_sv = av_fetch(PL_fdpid,fd,TRUE);
fd = (int) SvIVX(*p_sv);
SvREFCNT_dec(*p_sv);
*p_sv = &PL_sv_undef;
sv = *av_fetch(PL_fdpid,fd,TRUE);
+ MUTEX_UNLOCK(&PL_fdpid_mutex);
(void) SvUPGRADE(sv, SVt_IV);
SvIVX(sv) = pid;
status = 0;
}
}
- New(402,PL_Argv, (s - cmd) / 2 + 2, char*);
+ Newx(PL_Argv, (s - cmd) / 2 + 2, char*);
PL_Cmd = savepvn(cmd, s-cmd);
a = PL_Argv;
for (s = PL_Cmd; *s;)
(const char **) environ);
if (pid < 0)
{
- dTHR;
status = FAIL;
if (ckWARN(WARN_EXEC))
warner(WARN_EXEC,"Can't exec \"%s\": %s",
Perl_stdin_fd = pFd[that];
if (strNE(cmd,"-"))
{
+ PERL_FLUSHALL_FOR_CHILD;
pid = spawn_cmd(cmd, Perl_stdin_fd, Perl_stdout_fd);
if (pid >= 0)
{
+ MUTEX_LOCK(&PL_fdpid_mutex);
sv = *av_fetch(PL_fdpid,pFd[this],TRUE);
+ MUTEX_UNLOCK(&PL_fdpid_mutex);
(void) SvUPGRADE(sv, SVt_IV);
SvIVX(sv) = pid;
fd = PerlIO_fdopen(pFd[this], mode);
}
else
{
+ MUTEX_LOCK(&PL_fdpid_mutex);
sv = *av_fetch(PL_fdpid,pFd[that],TRUE);
+ MUTEX_UNLOCK(&PL_fdpid_mutex);
(void) SvUPGRADE(sv, SVt_IV);
SvIVX(sv) = pFd[this];
fd = PerlIO_fdopen(pFd[this], mode);
SV **sv;
FILE *other;
+ MUTEX_LOCK(&PL_fdpid_mutex);
sv = av_fetch(PL_fdpid,PerlIO_fileno(fp),TRUE);
+ MUTEX_UNLOCK(&PL_fdpid_mutex);
pid = (int) SvIVX(*sv);
SvREFCNT_dec(*sv);
*sv = &PL_sv_undef;