about summary refs log tree commit diff
path: root/Src/exec.c
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@ipost.com>2021-05-16 19:51:11 -0700
committerBart Schaefer <schaefer@ipost.com>2021-05-16 19:51:11 -0700
commitcf5c4828d1cdfd79e369a6b3323466bc961851c4 (patch)
tree5eaf375db11852b23df617ae0a64895e262ec2f2 /Src/exec.c
parent93b4ee524df9cee5886785e9a36596af872f95f7 (diff)
downloadzsh-cf5c4828d1cdfd79e369a6b3323466bc961851c4.tar.gz
zsh-cf5c4828d1cdfd79e369a6b3323466bc961851c4.tar.xz
zsh-cf5c4828d1cdfd79e369a6b3323466bc961851c4.zip
48857: declare "volatile" all globals that may be modified by signal handlers
Diffstat (limited to 'Src/exec.c')
-rw-r--r--Src/exec.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/Src/exec.c b/Src/exec.c
index 6f09e0d9f..49ff88b80 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -84,7 +84,7 @@ int nohistsave;
 /* error flag: bits from enum errflag_bits */
 
 /**/
-mod_export int errflag;
+mod_export volatile int errflag;
 
 /*
  * State of trap return value.  Value is from enum trap_state.
@@ -122,7 +122,7 @@ int subsh;
 /* != 0 if we have a return pending */
 
 /**/
-mod_export int retflag;
+mod_export volatile int retflag;
 
 /**/
 long lastval2;
@@ -1268,7 +1268,9 @@ execsimple(Estate state)
     } else {
 	int q = queue_signal_level();
 	dont_queue_signals();
-	if (code == WC_FUNCDEF)
+	if (errflag)
+	    lv = errflag;
+	else if (code == WC_FUNCDEF)
 	    lv = execfuncdef(state, NULL);
 	else
 	    lv = (execfuncs[code - WC_CURSH])(state, 0);