diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2004-04-21 11:18:45 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2004-04-21 11:18:45 +0000 |
commit | 5747147afff8a991561a490eca38892c1971a901 (patch) | |
tree | dad6c366403973811fe775a49922f3fa724a4eb4 /Src/signals.h | |
parent | f34d9be61b047beadb24748163c1bc59a7eff9d3 (diff) | |
download | zsh-5747147afff8a991561a490eca38892c1971a901.tar.gz zsh-5747147afff8a991561a490eca38892c1971a901.tar.xz zsh-5747147afff8a991561a490eca38892c1971a901.zip |
19809: improve NO_TRAPS_ASYNC by queueing traps alone
Diffstat (limited to 'Src/signals.h')
-rw-r--r-- | Src/signals.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Src/signals.h b/Src/signals.h index 4b8197d84..e86906ebc 100644 --- a/Src/signals.h +++ b/Src/signals.h @@ -101,6 +101,23 @@ #define restore_queue_signals(q) (queueing_enabled = (q)) +/* + * Similar (but simpler) mechanism used for queueing traps. + * Only needed if NO_TRAPS_ASYNC is set. + */ +#define queue_traps() (trap_queueing_enabled++) + +#define run_queued_traps() do { \ + while (trap_queue_front != trap_queue_rear) { /* while traps in queue */ \ + trap_queue_front = (trap_queue_front + 1) % MAX_QUEUE_SIZE; \ + dotrap(trap_queue[trap_queue_front]); /* handle queued trap */ \ + } \ +} while (0) + +#define dont_queue_traps() do { \ + trap_queueing_enabled = 0; \ + run_queued_traps(); \ +} while (0) /* Make some signal functions faster. */ |