1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-11-17 11:41:07 +01:00

52309: fix cases that hang with all signals blocked.

* no job control inside <<(substition)
* allow interrupt of multios reading from a terminal
This commit is contained in:
Bart Schaefer 2023-11-15 20:29:50 -08:00
parent 0840f34e1f
commit ddfc81a2b8
2 changed files with 6 additions and 2 deletions

View file

@ -2309,7 +2309,7 @@ closemn(struct multio **mfds, int fd, int type)
for (i = 0; i < mn->ct; i++)
while ((len = read(mn->fds[i], buf, TCBUFSIZE)) != 0) {
if (len < 0) {
if (errno == EINTR)
if (errno == EINTR && !isatty(mn->fds[i]))
continue;
else
break;
@ -5096,7 +5096,7 @@ getpipe(char *cmd, int nullexec)
procsubstpid = pid;
return pipes[!out];
}
entersubsh(ESUB_ASYNC|ESUB_PGRP, NULL);
entersubsh(ESUB_ASYNC|ESUB_PGRP|ESUB_NOMONITOR, NULL);
redup(pipes[out], out);
closem(FDT_UNUSED, 0); /* this closes pipes[!out] as well */
cmdpush(CS_CMDSUBST);