diff options
author | Bart Schaefer <schaefer@ipost.com> | 2021-05-16 19:51:11 -0700 |
---|---|---|
committer | Bart Schaefer <schaefer@ipost.com> | 2021-05-16 19:51:11 -0700 |
commit | cf5c4828d1cdfd79e369a6b3323466bc961851c4 (patch) | |
tree | 5eaf375db11852b23df617ae0a64895e262ec2f2 /Src/exec.c | |
parent | 93b4ee524df9cee5886785e9a36596af872f95f7 (diff) | |
download | zsh-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.c | 8 |
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); |