about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-06-18 07:38:35 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-06-18 07:38:35 +0000
commitb6647cd1f3fada446b089002bfc5994c7d0bd789 (patch)
tree61e43782c90459fdc6622fbc783698847430a4ad
parent449d402a4298dd50f177567057a51641549e7679 (diff)
downloadzsh-b6647cd1f3fada446b089002bfc5994c7d0bd789.tar.gz
zsh-b6647cd1f3fada446b089002bfc5994c7d0bd789.tar.xz
zsh-b6647cd1f3fada446b089002bfc5994c7d0bd789.zip
14951
-rw-r--r--ChangeLog5
-rw-r--r--Src/signals.c4
-rw-r--r--Src/signals.h35
3 files changed, 28 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index c02899849..ecbffded7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-06-18  Sven Wischnowsky  <wischnow@zsh.org>
+
+	* 14951: Src/signals.c, Src/signals.h: rename handler() to
+	zhandler() because it's now exported to modules
+
 2001-06-14  Peter Stephenson  <pws@csr.com>
 
 	* 14921: Completion/Zsh/_zftp: autoload zfcd_match and zfget_match
diff --git a/Src/signals.c b/Src/signals.c
index 649d78b73..e67887170 100644
--- a/Src/signals.c
+++ b/Src/signals.c
@@ -93,7 +93,7 @@ install_handler(int sig)
 #ifdef POSIX_SIGNALS
     struct sigaction act;
  
-    act.sa_handler = (SIGNAL_HANDTYPE) handler;
+    act.sa_handler = (SIGNAL_HANDTYPE) zhandler;
     sigemptyset(&act.sa_mask);        /* only block sig while in handler */
     act.sa_flags = 0;
 # ifdef SA_INTERRUPT                  /* SunOS 4.x */
@@ -401,7 +401,7 @@ signal_suspend(int sig, int sig2)
  
 /**/
 mod_export RETSIGTYPE
-handler(int sig)
+zhandler(int sig)
 {
     sigset_t newmask, oldmask;
 
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 */
-