Take interrupts immediately when restoring the interrupt mask.
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Tue, 7 Sep 1993 21:47:14 +0000 (21:47 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Tue, 7 Sep 1993 21:47:14 +0000 (21:47 +0000)
v7/src/microcode/interp.c
v8/src/microcode/interp.c

index e41c0437b691cd5148b4e9f8360cc9bed5565156..df5a3642f35f00c3b7526150815fb3bd34f43339 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: interp.c,v 9.77 1993/08/24 23:27:52 ziggy Exp $
+$Id: interp.c,v 9.78 1993/09/07 21:47:14 gjr Exp $
 
 Copyright (c) 1988-1993 Massachusetts Institute of Technology
 
@@ -2231,12 +2231,19 @@ Primitive_Internal_Apply:
 
     case RC_RESTORE_FLUIDS:
       Fluid_Bindings = Fetch_Expression();
-      /* Why is this here? -- Jinx */
-      COMPILER_SETUP_INTERRUPT();
       break;
 
     case RC_RESTORE_INT_MASK:
       SET_INTERRUPT_MASK (UNSIGNED_FIXNUM_TO_LONG (Fetch_Expression()));
+      if (GC_Check (0))
+        Request_GC (0);
+      if ((PENDING_INTERRUPTS ()) != 0)
+      {
+       Store_Return (RC_RESTORE_VALUE);
+       Store_Expression (Val);
+       Save_Cont ();
+       Interrupt (PENDING_INTERRUPTS ());
+      }
       break;
 
     case RC_STACK_MARKER:
index e41c0437b691cd5148b4e9f8360cc9bed5565156..df5a3642f35f00c3b7526150815fb3bd34f43339 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: interp.c,v 9.77 1993/08/24 23:27:52 ziggy Exp $
+$Id: interp.c,v 9.78 1993/09/07 21:47:14 gjr Exp $
 
 Copyright (c) 1988-1993 Massachusetts Institute of Technology
 
@@ -2231,12 +2231,19 @@ Primitive_Internal_Apply:
 
     case RC_RESTORE_FLUIDS:
       Fluid_Bindings = Fetch_Expression();
-      /* Why is this here? -- Jinx */
-      COMPILER_SETUP_INTERRUPT();
       break;
 
     case RC_RESTORE_INT_MASK:
       SET_INTERRUPT_MASK (UNSIGNED_FIXNUM_TO_LONG (Fetch_Expression()));
+      if (GC_Check (0))
+        Request_GC (0);
+      if ((PENDING_INTERRUPTS ()) != 0)
+      {
+       Store_Return (RC_RESTORE_VALUE);
+       Store_Expression (Val);
+       Save_Cont ();
+       Interrupt (PENDING_INTERRUPTS ());
+      }
       break;
 
     case RC_STACK_MARKER: