From b6647cd1f3fada446b089002bfc5994c7d0bd789 Mon Sep 17 00:00:00 2001 From: Sven Wischnowsky Date: Mon, 18 Jun 2001 07:38:35 +0000 Subject: 14951 --- Src/signals.h | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'Src/signals.h') diff --git a/Src/signals.h b/Src/signals.h index b1970e0f2..4b8197d84 100644 --- a/Src/signals.h +++ b/Src/signals.h @@ -73,26 +73,34 @@ * queue signals, it is probably overkill for zsh to do * * this, but it shouldn't hurt anything to do it anyway. */ -/* Right now I'm queueing all signals, but maybe we only * - * need to queue SIGCHLD. Anybody know? */ - -#define MAX_QUEUE_SIZE 16 +#define MAX_QUEUE_SIZE 128 #define queue_signals() (queueing_enabled++) +#define run_queued_signals() do { \ + while (queue_front != queue_rear) { /* while signals in queue */ \ + sigset_t oset; \ + queue_front = (queue_front + 1) % MAX_QUEUE_SIZE; \ + oset = signal_setmask(signal_mask_queue[queue_front]); \ + zhandler(signal_queue[queue_front]); /* handle queued signal */ \ + signal_setmask(oset); \ + } \ +} while (0) + #define unqueue_signals() do { \ DPUTS(!queueing_enabled, "BUG: unqueue_signals called but not queueing"); \ - if (!--queueing_enabled) { \ - while (queue_front != queue_rear) { /* while signals in queue */ \ - sigset_t oset; \ - queue_front = (queue_front + 1) % MAX_QUEUE_SIZE; \ - oset = signal_setmask(signal_mask_queue[queue_front]); \ - handler(signal_queue[queue_front]); /* handle queued signal */ \ - signal_setmask(oset); \ - } \ - } \ + if (!--queueing_enabled) run_queued_signals(); \ } while (0) +#define queue_signal_level() queueing_enabled + +#define dont_queue_signals() do { \ + queueing_enabled = 0; \ + run_queued_signals(); \ +} while (0) + +#define restore_queue_signals(q) (queueing_enabled = (q)) + /* Make some signal functions faster. */ @@ -117,4 +125,3 @@ extern sigset_t signal_block _((sigset_t)); #else extern sigset_t signal_unblock _((sigset_t)); #endif /* POSIX_SIGNALS */ - -- cgit 1.4.1