diff options
author | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-01-16 13:44:18 +0000 |
---|---|---|
committer | Sven Wischnowsky <wischnow@users.sourceforge.net> | 2001-01-16 13:44:18 +0000 |
commit | 757168e2c8af374436108266cc3cfd32a946a590 (patch) | |
tree | 293929274f50de8733f00c4ae561a85e9c5fc16f /Src/Modules/zutil.c | |
parent | 052316fea3b74599de04fb3990a444b0ba08b04b (diff) | |
download | zsh-757168e2c8af374436108266cc3cfd32a946a590.tar.gz zsh-757168e2c8af374436108266cc3cfd32a946a590.tar.xz zsh-757168e2c8af374436108266cc3cfd32a946a590.zip |
remove 13108 (trap queues); replace with signal queueing to ensure that user signal handlers are only executed when it is safe to run them (13365)
Diffstat (limited to 'Src/Modules/zutil.c')
-rw-r--r-- | Src/Modules/zutil.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c index 9dae030df..8a69a561b 100644 --- a/Src/Modules/zutil.c +++ b/Src/Modules/zutil.c @@ -219,12 +219,14 @@ evalstyle(Stypat p) } errflag = ef; + queue_signals(); if ((ret = getaparam("reply"))) ret = arrdup(ret); else if ((str = getsparam("reply"))) { ret = (char **) hcalloc(2 * sizeof(char *)); ret[0] = dupstring(str); } + unqueue_signals(); unsetparam("reply"); return ret; @@ -725,12 +727,14 @@ savematch(MatchData *m) { char **a; + queue_signals(); a = getaparam("match"); m->match = a ? zarrdup(a) : NULL; a = getaparam("mbegin"); m->mbegin = a ? zarrdup(a) : NULL; a = getaparam("mend"); m->mend = a ? zarrdup(a) : NULL; + unqueue_signals(); } static void @@ -1078,8 +1082,13 @@ rmatch(RParseResult *sm, char *subj, char *var1, char *var2, int comp) if (next->pattern && pattry(next->patprog, subj) && (!next->guard || (execstring(next->guard, 1, 0), !lastval))) { LinkNode aln; - char **mend = getaparam("mend"); - int len = atoi(mend[0]); + char **mend; + int len; + + queue_signals(); + mend = getaparam("mend"); + len = atoi(mend[0]); + unqueue_signals(); for (i = len; i; i--) if (*subj++ == Meta) |