1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-07-11 16:51:26 +02: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

@ -1,5 +1,9 @@
2023-11-15 Bart Schaefer <schaefer@zsh.org>
* 52309: Src/exec.c: suppress job control inside <<(substition)
to fix cases that hang with all signals blocked. Similarly,
allow interrupt of multios reading from a terminal.
* 52308: Etc/FAQ.yo: mention new features, fix some old answers
* 52275: Src/compat.c: rationality in zgetdir() and zgetcwd() to

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);