[git commit] hush: remove one redundant getpid() on every startup

Denys Vlasenko vda.linux at googlemail.com
Sun Dec 20 15:36:00 UTC 2020


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

function                                             old     new   delta
hush_main                                           1151    1147      -4

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

diff --git a/shell/hush.c b/shell/hush.c
index 3ccc18146..f29c985ad 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -9988,6 +9988,7 @@ static int set_mode(int state, char mode, const char *o_opt)
 int hush_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int hush_main(int argc, char **argv)
 {
+	pid_t cached_getpid;
 	enum {
 		OPT_login = (1 << 0),
 	};
@@ -10016,6 +10017,10 @@ int hush_main(int argc, char **argv)
 	G.argv0_for_re_execing = argv[0];
 #endif
 
+	cached_getpid = getpid();   /* for tcsetpgrp() during init */
+	G.root_pid = cached_getpid; /* for $PID   (NOMMU can override via -$HEXPID:HEXPPID:...) */
+	G.root_ppid = getppid();    /* for $$PPID (NOMMU can override)  */
+
 	/* Deal with HUSH_VERSION */
 	debug_printf_env("unsetenv '%s'\n", "HUSH_VERSION");
 	unsetenv("HUSH_VERSION"); /* in case it exists in initial env */
@@ -10103,8 +10108,6 @@ int hush_main(int argc, char **argv)
 		char *script = get_script_content(-argc - 1);
 		G.global_argv = argv;
 		G.global_argc = string_array_len(argv);
-		G.root_pid = getpid();
-		G.root_ppid = getppid();
 		//install_special_sighandlers(); - needed?
 		parse_and_run_string(script);
 		goto final_return;
@@ -10232,11 +10235,6 @@ int hush_main(int argc, char **argv)
 	G.global_argv = argv + (optind - 1);
 	G.global_argv[0] = argv[0];
 
-	if (!G.root_pid) {
-		G.root_pid = getpid();
-		G.root_ppid = getppid();
-	}
-
 	/* If we are login shell... */
 	if (flags & OPT_login) {
 		const char *hp = NULL;
@@ -10406,7 +10404,7 @@ int hush_main(int argc, char **argv)
 			 * (bash, too, does this only if ctty is available) */
 			bb_setpgrp(); /* is the same as setpgid(our_pid, our_pid); */
 			/* Grab control of the terminal */
-			tcsetpgrp(G_interactive_fd, getpid());
+			tcsetpgrp(G_interactive_fd, cached_getpid);
 		}
 		enable_restore_tty_pgrp_on_exit();
 


More information about the busybox-cvs mailing list