ash: fix $! value when traps are set
Signed-off-by: Alexander Shishkin <virtuoso@slind.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
7a2ba329b9
commit
ccb9771861
@ -4633,6 +4633,7 @@ clear_traps(void)
|
||||
INT_ON;
|
||||
}
|
||||
}
|
||||
may_have_traps = 0;
|
||||
}
|
||||
|
||||
/* Lives far away from here, needed for forkchild */
|
||||
|
1
shell/ash_test/ash-signals/signal7.right
Normal file
1
shell/ash_test/ash-signals/signal7.right
Normal file
@ -0,0 +1 @@
|
||||
Bug detected: 0
|
18
shell/ash_test/ash-signals/signal7.tests
Executable file
18
shell/ash_test/ash-signals/signal7.tests
Executable file
@ -0,0 +1,18 @@
|
||||
bug() {
|
||||
trap : exit
|
||||
# Bug was causing sh to be run in subshell,
|
||||
# as if this line is replaced with (sh -c ...; exit $?) &
|
||||
# here:
|
||||
sh -c 'echo REAL_CHILD=$$' &
|
||||
echo PARENTS_IDEA_OF_CHILD=$!
|
||||
wait # make sure bkgd shell completes
|
||||
}
|
||||
|
||||
bug | {
|
||||
while read varval; do
|
||||
eval $varval
|
||||
done
|
||||
test x"$REAL_CHILD" != x"" \
|
||||
&& test x"$REAL_CHILD" = x"$PARENTS_IDEA_OF_CHILD"
|
||||
echo "Bug detected: $?"
|
||||
}
|
@ -4108,8 +4108,6 @@ static void insert_bg_job(struct pipe *pi)
|
||||
|
||||
if (G_interactive_fd)
|
||||
printf("[%d] %d %s\n", job->jobid, job->cmds[0].pid, job->cmdtext);
|
||||
/* Last command's pid goes to $! */
|
||||
G.last_bg_pid = job->cmds[job->num_cmds - 1].pid;
|
||||
G.last_jobid = job->jobid;
|
||||
}
|
||||
|
||||
@ -5076,6 +5074,8 @@ static int run_list(struct pipe *pi)
|
||||
if (G.run_list_level == 1)
|
||||
insert_bg_job(pi);
|
||||
#endif
|
||||
/* Last command's pid goes to $! */
|
||||
G.last_bg_pid = pi->cmds[pi->num_cmds - 1].pid;
|
||||
G.last_exitcode = rcode = EXIT_SUCCESS;
|
||||
debug_printf_exec(": cmd&: exitcode EXIT_SUCCESS\n");
|
||||
} else {
|
||||
|
1
shell/hush_test/hush-trap/signal7.right
Normal file
1
shell/hush_test/hush-trap/signal7.right
Normal file
@ -0,0 +1 @@
|
||||
Bug detected: 0
|
18
shell/hush_test/hush-trap/signal7.tests
Executable file
18
shell/hush_test/hush-trap/signal7.tests
Executable file
@ -0,0 +1,18 @@
|
||||
bug() {
|
||||
trap : exit
|
||||
# Bug was causing sh to be run in subshell,
|
||||
# as if this line is replaced with (sh -c ...; exit $?) &
|
||||
# here:
|
||||
sh -c 'echo REAL_CHILD=$$' &
|
||||
echo PARENTS_IDEA_OF_CHILD=$!
|
||||
wait # make sure bkgd shell completes
|
||||
}
|
||||
|
||||
bug | {
|
||||
while read varval; do
|
||||
eval $varval
|
||||
done
|
||||
test x"$REAL_CHILD" != x"" \
|
||||
&& test x"$REAL_CHILD" = x"$PARENTS_IDEA_OF_CHILD"
|
||||
echo "Bug detected: $?"
|
||||
}
|
Loading…
Reference in New Issue
Block a user