ash,hush: fix SIGCHLD interrupting read builtin
function old new delta readcmd 169 217 +48 shell_builtin_read 1087 1097 +10 localcmd 366 364 -2 builtin_read 197 193 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/2 up/down: 58/-6) Total: 52 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@@ -13268,6 +13268,7 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
|
||||
/* "read -s" needs to save/restore termios, can't allow ^C
|
||||
* to jump out of it.
|
||||
*/
|
||||
again:
|
||||
INT_OFF;
|
||||
r = shell_builtin_read(setvar0,
|
||||
argptr,
|
||||
@@ -13280,6 +13281,12 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
|
||||
);
|
||||
INT_ON;
|
||||
|
||||
if ((uintptr_t)r == 1 && errno == EINTR) {
|
||||
/* to get SIGCHLD: sleep 1 & read x; echo $x */
|
||||
if (pending_sig == 0)
|
||||
goto again;
|
||||
}
|
||||
|
||||
if ((uintptr_t)r > 1)
|
||||
ash_msg_and_raise_error(r);
|
||||
|
||||
|
Reference in New Issue
Block a user