summaryrefslogtreecommitdiff
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.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);