summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/trap.c7
1 files changed, 4 insertions, 3 deletions
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;