diff --git a/ldb/interrupt.c b/ldb/interrupt.c
index 86573850fc615193ef9d7109c1ea7a23b60e2f5f..6c38c3f7956d0e7fb58ff9aa6f761f70fb182d07 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.32 1992/03/08 18:42:36 wlott Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/interrupt.c,v 1.33 1992/03/22 19:57:46 wlott Exp $ */
 
 /* Interrupt handing magic. */
 
@@ -163,8 +163,16 @@ void interrupt_handle_pending(context)
 
 #ifdef mips
     context->sc_regs[FLAGS] &= ~(1<<flag_Interrupted);
+#else
+#ifdef sparc
+    /* Bit 0 is the pseudo-atomic-interrupted flag, and bit 2 is the
+	pseudo-atomic-atomic flag.  Normally, p-a-a is cleared before
+	we get control, but sometimes (assembly/sparc/bit-bash.lisp)
+	it is not.  So we clear them both here. */
+    context->sc_regs[ALLOC] &= ~5;
 #else
     SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, 0);
+#endif
 #endif
     SetSymbolValue(INTERRUPT_PENDING, NIL);
     if (maybe_gc_pending) {
@@ -251,9 +259,13 @@ struct sigcontext *context;
     } else if ((!foreign_function_call_active)
 #ifdef mips
                && (context->sc_regs[FLAGS] & (1<<flag_Atomic))
+#else
+#ifdef sparc
+	       && (context->sc_regs[ALLOC] & 4)
 #else
 	       && (SymbolValue(PSEUDO_ATOMIC_ATOMIC))
-#endif               
+#endif
+#endif
                ) {
         pending_signal = signal;
         pending_code = code;
@@ -261,8 +273,12 @@ struct sigcontext *context;
         context->sc_mask |= BLOCKABLE;
 #ifdef mips
         context->sc_regs[FLAGS] |= (1<<flag_Interrupted);
+#else
+#ifdef sparc
+	context->sc_regs[ALLOC] |= 1;
 #else
 	SetSymbolValue(PSEUDO_ATOMIC_INTERRUPTED, T);
+#endif
 #endif
     } else
         interrupt_handle_now(signal, code, context);