about summary refs log tree commit diff
path: root/Src/init.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2006-11-08 17:43:31 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2006-11-08 17:43:31 +0000
commitaa2ae64dff6d623c4635f108788df126285dbb9d (patch)
tree1c4aab0e2b4a99afd66c601ceac184963267cab4 /Src/init.c
parent96f525f46863f5fa295b3822b4c379dabf5e1fbc (diff)
downloadzsh-aa2ae64dff6d623c4635f108788df126285dbb9d.tar.gz
zsh-aa2ae64dff6d623c4635f108788df126285dbb9d.tar.xz
zsh-aa2ae64dff6d623c4635f108788df126285dbb9d.zip
22983: exit could loop for ever
Diffstat (limited to 'Src/init.c')
-rw-r--r--Src/init.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/Src/init.c b/Src/init.c
index fad36bf0f..b987f1399 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -131,6 +131,15 @@ loop(int toplevel, int justonce)
 		(tok == LEXERR && (!isset(SHINSTDIN) || !toplevel)) ||
 		justonce)
 		break;
+	    if (exit_pending) {
+		/*
+		 * Something down there (a ZLE function?) decided
+		 * to exit when there was stuff to clear up.
+		 * Handle that now.
+		 */
+		stopmsg = 1;
+		zexit(exit_pending >> 1, 0);
+	    }
 	    if (tok == LEXERR && !lastval)
 		lastval = 1;
 	    continue;