From 5c481f916364ed3b4ec2e01fa7b4309a82ec25b0 Mon Sep 17 00:00:00 2001
From: wlott <wlott>
Date: Sat, 3 Nov 1990 16:32:44 +0000
Subject: [PATCH] Save the signal mask when we hit the guard page so we can
 restore it.

---
 ldb/interrupt.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/ldb/interrupt.c b/ldb/interrupt.c
index 4dc6fc5ff..c680c05f7 100644
--- a/ldb/interrupt.c
+++ b/ldb/interrupt.c
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/interrupt.c,v 1.12 1990/10/29 19:24:18 wlott Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/interrupt.c,v 1.13 1990/11/03 16:32:44 wlott Exp $ */
 
 /* Interrupt handing magic. */
 
@@ -216,12 +216,12 @@ struct sigcontext *context;
         if (pending_signal) {
             signal = pending_signal;
             code = pending_code;
-            context->sc_mask = pending_mask;
             pending_signal = 0;
             pending_code = 0;
-            pending_mask = 0;
             handle_now(signal, code, context);
         }
+        context->sc_mask = pending_mask;
+        pending_mask = 0;
         skip_instruction(context);
     }
     else
@@ -314,7 +314,10 @@ struct sigcontext *context;
 
         if (context->sc_regs[FLAGS] & (1<<flag_Atomic)) {
             maybe_gc_pending = TRUE;
-            context->sc_mask |= BLOCKABLE;
+            if (pending_signal == 0) {
+                pending_mask = context->sc_mask;
+                context->sc_mask |= BLOCKABLE;
+            }
             context->sc_regs[FLAGS] |= (1<<flag_Interrupted);
         }
         else {
-- 
GitLab