[git commit] hush: small optimization in run_list

Denys Vlasenko vda.linux at googlemail.com
Tue Nov 8 19:26:11 UTC 2016


commit: https://git.busybox.net/busybox/commit/?id=6c635d62d41477e92f0b30b0f525c7838e64a07d
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

I thought gcc can detect this itself. It doesn't.

function                                             old     new   delta
run_list                                            1030    1021      -9

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index a5f0599..5a36a76 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -8004,20 +8004,21 @@ static int run_list(struct pipe *pi)
 			G.last_bg_pid = pi->cmds[pi->num_cmds - 1].pid;
 			debug_printf_exec(": cmd&: exitcode EXIT_SUCCESS\n");
 /* Check pi->pi_inverted? "! sleep 1 & echo $?": bash says 1. dash and ash says 0 */
-			G.last_exitcode = rcode = EXIT_SUCCESS;
-			check_and_run_traps();
+			rcode = EXIT_SUCCESS;
+			goto check_traps;
 		} else {
 #if ENABLE_HUSH_JOB
 			if (G.run_list_level == 1 && G_interactive_fd) {
 				/* Waits for completion, then fg's main shell */
 				rcode = checkjobs_and_fg_shell(pi);
 				debug_printf_exec(": checkjobs_and_fg_shell exitcode %d\n", rcode);
-			} else
-#endif
-			{ /* This one just waits for completion */
-				rcode = checkjobs(pi, 0 /*(no pid to wait for)*/);
-				debug_printf_exec(": checkjobs exitcode %d\n", rcode);
+				goto check_traps;
 			}
+#endif
+			/* This one just waits for completion */
+			rcode = checkjobs(pi, 0 /*(no pid to wait for)*/);
+			debug_printf_exec(": checkjobs exitcode %d\n", rcode);
+ check_traps:
 			G.last_exitcode = rcode;
 			check_and_run_traps();
 		}


More information about the busybox-cvs mailing list