summaryrefslogtreecommitdiff
path: root/Src/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/exec.c')
-rw-r--r--Src/exec.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/Src/exec.c b/Src/exec.c
index 17ba376dd..c55494b96 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -3429,6 +3429,22 @@ doshfunc(char *name, Eprog prog, LinkList doshargs, int flags, int noreturnval)
if (noreturnval)
lastval = oldlastval;
popheap();
+
+ if (exit_pending) {
+ if (locallevel) {
+ /* Still functions to return: force them to do so. */
+ retflag = 1;
+ breaks = loops;
+ } else {
+ /*
+ * All functions finished: time to exit the shell.
+ * We already did the `stopmsg' test when the
+ * exit command was handled.
+ */
+ stopmsg = 1;
+ zexit(exit_pending >> 1, 0);
+ }
+ }
}
/* This finally executes a shell function and any function wrappers *