ash: comment out free(p) just before _exit, tweak some outdated comments

Planned to sync exitshell up to dash, turned out ours is better :)

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2016-10-07 03:17:28 +02:00
parent 2972e2c4ac
commit f37e1155aa

View File

@ -474,7 +474,7 @@ raise_exception(int e)
#endif #endif
/* /*
* Called from trap.c when a SIGINT is received. (If the user specifies * Called when a SIGINT is received. (If the user specifies
* that SIGINT is to be trapped or ignored using the trap builtin, then * that SIGINT is to be trapped or ignored using the trap builtin, then
* this routine is not called.) Suppressint is nonzero when interrupts * this routine is not called.) Suppressint is nonzero when interrupts
* are held using the INT_OFF macro. (The test for iflag is just * are held using the INT_OFF macro. (The test for iflag is just
@ -3357,8 +3357,6 @@ unaliascmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
#endif /* ASH_ALIAS */ #endif /* ASH_ALIAS */
/* ============ jobs.c */
/* Mode argument to forkshell. Don't change FORK_FG or FORK_BG. */ /* Mode argument to forkshell. Don't change FORK_FG or FORK_BG. */
#define FORK_FG 0 #define FORK_FG 0
#define FORK_BG 1 #define FORK_BG 1
@ -8161,8 +8159,6 @@ commandcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
#endif #endif
/* ============ eval.c */
static int funcblocksize; /* size of structures in function */ static int funcblocksize; /* size of structures in function */
static int funcstringsize; /* size of strings in node */ static int funcstringsize; /* size of strings in node */
static void *funcblock; /* block to allocate function from */ static void *funcblock; /* block to allocate function from */
@ -12745,8 +12741,6 @@ find_command(char *name, struct cmdentry *entry, int act, const char *path)
} }
/* ============ trap.c */
/* /*
* The trap builtin. * The trap builtin.
*/ */
@ -13172,15 +13166,10 @@ exitshell(void)
#if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT #if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
save_history(line_input_state); save_history(line_input_state);
#endif #endif
status = exitstatus; status = exitstatus;
TRACE(("pid %d, exitshell(%d)\n", getpid(), status)); TRACE(("pid %d, exitshell(%d)\n", getpid(), status));
if (setjmp(loc.loc)) { if (setjmp(loc.loc)) {
if (exception_type == EXEXIT) if (exception_type == EXEXIT)
/* dash bug: it just does _exit(exitstatus) here
* but we have to do setjobctl(0) first!
* (bug is still not fixed in dash-0.5.3 - if you run dash
* under Midnight Commander, on exit from dash MC is backgrounded) */
status = exitstatus; status = exitstatus;
goto out; goto out;
} }
@ -13190,10 +13179,13 @@ exitshell(void)
trap[0] = NULL; trap[0] = NULL;
evalskip = 0; evalskip = 0;
evalstring(p, 0); evalstring(p, 0);
free(p); /*free(p); - we'll exit soon */
} }
flush_stdout_stderr(); flush_stdout_stderr();
out: out:
/* dash wraps setjobctl(0) in "if (setjmp(loc.loc) == 0) {...}".
* our setjobctl(0) does not panic if tcsetpgrp fails inside it.
*/
setjobctl(0); setjobctl(0);
_exit(status); _exit(status);
/* NOTREACHED */ /* NOTREACHED */
@ -13202,18 +13194,15 @@ exitshell(void)
static void static void
init(void) init(void)
{ {
/* from input.c: */
/* we will never free this */ /* we will never free this */
basepf.next_to_pgetc = basepf.buf = ckmalloc(IBUFSIZ); basepf.next_to_pgetc = basepf.buf = ckmalloc(IBUFSIZ);
/* from trap.c: */
signal(SIGCHLD, SIG_DFL); signal(SIGCHLD, SIG_DFL);
/* bash re-enables SIGHUP which is SIG_IGNed on entry. /* bash re-enables SIGHUP which is SIG_IGNed on entry.
* Try: "trap '' HUP; bash; echo RET" and type "kill -HUP $$" * Try: "trap '' HUP; bash; echo RET" and type "kill -HUP $$"
*/ */
signal(SIGHUP, SIG_DFL); signal(SIGHUP, SIG_DFL);
/* from var.c: */
{ {
char **envp; char **envp;
const char *p; const char *p;