From 757168e2c8af374436108266cc3cfd32a946a590 Mon Sep 17 00:00:00 2001 From: Sven Wischnowsky Date: Tue, 16 Jan 2001 13:44:18 +0000 Subject: 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) --- Src/hist.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'Src/hist.c') diff --git a/Src/hist.c b/Src/hist.c index 9149d479b..b9480d786 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -382,6 +382,7 @@ histsubchar(int c) /* get event number */ + queue_signals(); if (c == '?') { for (;;) { c = ingetc(); @@ -397,6 +398,7 @@ histsubchar(int c) evset = 0; if (ev == -1) { herrflush(); + unqueue_signals(); zerr("no such event: %s", buf, 0); return -1; } @@ -450,6 +452,7 @@ histsubchar(int c) evset = 1; } else if ((ev = hcomsearch(buf)) == -1) { herrflush(); + unqueue_signals(); zerr("event not found: %s", buf, 0); return -1; } else @@ -458,9 +461,10 @@ histsubchar(int c) /* get the event */ - if (!(ehist = gethist(defev = ev))) + if (!(ehist = gethist(defev = ev))) { + unqueue_signals(); return -1; - + } /* extract the relevant arguments */ argc = getargc(ehist); @@ -473,6 +477,7 @@ histsubchar(int c) argc = getargc(ehist); } else { herrflush(); + unqueue_signals(); zerr("Ambiguous history reference", NULL, 0); return -1; } @@ -486,8 +491,10 @@ histsubchar(int c) } else { inungetc(c); larg = farg = getargspec(argc, marg, evset); - if (larg == -2) + if (larg == -2) { + unqueue_signals(); return -1; + } if (farg != -1) cflag = 0; c = ingetc(); @@ -497,8 +504,10 @@ histsubchar(int c) } else if (c == '-') { cflag = 0; larg = getargspec(argc, marg, evset); - if (larg == -2) + if (larg == -2) { + unqueue_signals(); return -1; + } if (larg == -1) larg = argc - 1; } else @@ -508,8 +517,11 @@ histsubchar(int c) farg = 0; if (larg == -1) larg = argc; - if (!(sline = getargs(ehist, farg, larg))) + if (!(sline = getargs(ehist, farg, larg))) { + unqueue_signals(); return -1; + } + unqueue_signals(); } /* do the modifiers */ @@ -1000,10 +1012,12 @@ mod_export int hend(Eprog prog) { int flag, save = 1; - char *hf = getsparam("HISTFILE"); + char *hf; DPUTS(stophist != 2 && !(inbufflags & INP_ALIAS) && !chline, "BUG: chline is NULL in hend()"); + queue_signals(); + hf = getsparam("HISTFILE"); if (histdone & HISTFLAG_SETTY) settyinfo(&shttyinfo); if (!(histactive & HA_NOINC)) @@ -1013,6 +1027,7 @@ hend(Eprog prog) zfree(chwords, chwordlen*sizeof(short)); chline = NULL; histactive = 0; + unqueue_signals(); return 1; } if (hist_ignore_all_dups != isset(HISTIGNOREALLDUPS) @@ -1107,6 +1122,7 @@ hend(Eprog prog) if (isset(SHAREHISTORY)? histfileIsLocked() : isset(INCAPPENDHISTORY)) savehistfile(hf, 0, HFILE_USE_OPTIONS | HFILE_FAST); unlockhistfile(hf); /* It's OK to call this even if we aren't locked */ + unqueue_signals(); return !(flag & HISTFLAG_NOEXEC || errflag); } -- cgit 1.4.1