1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-01 21:51:40 +02:00

31536 with additions: Fix hang in previous process substitution fix.

Close applicable file descriptors when waiting for a job.
This commit is contained in:
Peter Stephenson 2013-07-19 12:09:32 +01:00
parent 3c5732223f
commit cda21a28e6
3 changed files with 40 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2013-07-19 Peter Stephenson <p.stephenson@samsung.com>
* 31536 (plus memory leak fixed, plus test code):
Src/jobs.c, Test/D03procsubst.ztst: fix hang in 31528 by
closing process substitution file descriptors when waiting
for job to finish.
2013-07-17 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 31528: Src/exec.c, Src/jobs.c, Src/zsh.h: use job table

View file

@ -1368,6 +1368,31 @@ zwaitjob(int job, int wait_cmd)
jn->stat |= STAT_LOCKED;
if (jn->stat & STAT_CHANGED)
printjob(jn, !!isset(LONGLISTJOBS), 1);
if (jn->filelist) {
/*
* The main shell is finished with any file descriptors used
* for process substitution associated with this job: close
* them to indicate to listeners there's no more input.
*
* Note we can't safely delete temporary files yet as these
* are directly visible to other processes. However,
* we can't deadlock on the fact that those still exist, so
* that's not a problem.
*/
LinkNode node = firstnode(jn->filelist);
while (node) {
Jobfile jf = (Jobfile)getdata(node);
if (jf->is_fd) {
LinkNode next = nextnode(node);
(void)remnode(jn->filelist, node);
zclose(jf->u.fd);
zfree(jf, sizeof(*jf));
node = next;
} else {
incnode(node);
}
}
}
while (!errflag && jn->stat &&
!(jn->stat & STAT_DONE) &&
!(interact && (jn->stat & STAT_STOPPED))) {

View file

@ -107,3 +107,11 @@
>third: This becomes argument three
>fourth: and this argument four
() {
# Make sure we don't close the file descriptor too early
eval 'print "Execute a complicated command first" | sed s/command/order/'
cat $1
} <(echo This line was brought to you by the letters F and D)
0:Process substitution as anonymous function argument
>Execute a complicated order first
>This line was brought to you by the letters F and D