diff options
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/shell/hush.c b/shell/hush.c index d111f0cc5..f064b8fd2 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -1946,7 +1946,12 @@ static void record_pending_signo(int sig) | |||
1946 | { | 1946 | { |
1947 | sigaddset(&G.pending_set, sig); | 1947 | sigaddset(&G.pending_set, sig); |
1948 | #if ENABLE_FEATURE_EDITING | 1948 | #if ENABLE_FEATURE_EDITING |
1949 | bb_got_signal = sig; /* for read_line_input: "we got a signal" */ | 1949 | if (sig != SIGCHLD |
1950 | || (G_traps && G_traps[SIGCHLD] && G_traps[SIGCHLD][0]) | ||
1951 | /* ^^^ if SIGCHLD, interrupt line reading only if it has a trap */ | ||
1952 | ) { | ||
1953 | bb_got_signal = sig; /* for read_line_input: "we got a signal" */ | ||
1954 | } | ||
1950 | #endif | 1955 | #endif |
1951 | #if ENABLE_HUSH_FAST | 1956 | #if ENABLE_HUSH_FAST |
1952 | if (sig == SIGCHLD) { | 1957 | if (sig == SIGCHLD) { |
@@ -2669,7 +2674,8 @@ static int get_user_input(struct in_str *i) | |||
2669 | } else { | 2674 | } else { |
2670 | /* For shell, LI_INTERRUPTIBLE is set: | 2675 | /* For shell, LI_INTERRUPTIBLE is set: |
2671 | * read_line_input will abort on either | 2676 | * read_line_input will abort on either |
2672 | * getting EINTR in poll(), or if it sees bb_got_signal != 0 | 2677 | * getting EINTR in poll() and bb_got_signal became != 0, |
2678 | * or if it sees bb_got_signal != 0 | ||
2673 | * (IOW: if signal arrives before poll() is reached). | 2679 | * (IOW: if signal arrives before poll() is reached). |
2674 | * Interactive testcases: | 2680 | * Interactive testcases: |
2675 | * (while kill -INT $$; do sleep 1; done) & | 2681 | * (while kill -INT $$; do sleep 1; done) & |