summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ChangeLog1
-rw-r--r--src/trap.c7
2 files changed, 5 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index f26353d..3febddd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,7 @@
 	* Changed boolean rootshell into shlvl counter.
 	* Catch set -e exits within built-in commands.
 	* Size optimisations with state/s in main().
+	* Only reread exitstatus on EXEXIT in exitshell.
 
 2005-01-31  Gerrit Pape <pape@smarden.org>
 
diff --git a/src/trap.c b/src/trap.c
index 7bc479b..6ccca08 100644
--- a/src/trap.c
+++ b/src/trap.c
@@ -352,16 +352,17 @@ exitshell(void)
 	struct jmploc loc;
 	char *p;
 	int status;
-	int jmp;
 
 #ifdef HETIO
 	hetio_reset_term();
 #endif
-	jmp = setjmp(loc.loc);
 	status = exitstatus;
 	TRACE(("pid %d, exitshell(%d)\n", getpid(), status));
-	if (jmp)
+	if (setjmp(loc.loc)) {
+		if (exception == EXEXIT)
+			_exit(exitstatus);
 		goto out;
+	}
 	handler = &loc;
 	if ((p = trap[0]) != NULL && *p != '\0') {
 		trap[0] = NULL;