ash: fix $! value when traps are set
No binary (build failed)
—
(log yok)
| @@ -4633,6 +4633,7 @@ clear_traps(void) | |
| INT_ON; | |
| } | |
| } | |
| + | may_have_traps = 0; |
| } | |
| /* Lives far away from here, needed for forkchild */ | |
| @@ -0,0 +1 @@ | |
| + | Bug detected: 0 |
| @@ -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 { | |
| @@ -0,0 +1 @@ | |
| + | Bug detected: 0 |
| @@ -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: $?" |
| + | } |