From 9deba93c9f16d2fcada2d372068667245ff98ca8 Mon Sep 17 00:00:00 2001
From: gerd <gerd>
Date: Mon, 15 Sep 2003 14:28:18 +0000
Subject: [PATCH] 	* src/lisp/gencgc.c (alloc_pseudo_atomic): Wrap alloc
 in 	pseudo-atomic only if not already in a pseudo-atomic section.

---
 lisp/gencgc.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/lisp/gencgc.c b/lisp/gencgc.c
index d12a17bdc..535c08f1d 100644
--- a/lisp/gencgc.c
+++ b/lisp/gencgc.c
@@ -7,7 +7,7 @@
  *
  * Douglas Crosher, 1996, 1997, 1998, 1999.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.35 2003/09/13 14:21:30 gerd Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.36 2003/09/15 14:28:18 gerd Exp $
  *
  */
 
@@ -6801,13 +6801,24 @@ char *
 alloc_pseudo_atomic (int nbytes)
 {
   char *result;
-
-  clr_pseudo_atomic_interrupted ();
-  set_pseudo_atomic_atomic ();
+  int in_pseudo_atomic;
+  
+  in_pseudo_atomic = get_pseudo_atomic_atomic ();
+  if (!in_pseudo_atomic)
+    {
+      clr_pseudo_atomic_interrupted ();
+      set_pseudo_atomic_atomic ();
+    }
+  
   result = alloc (nbytes);
-  clr_pseudo_atomic_atomic ();
-  if (get_pseudo_atomic_interrupted ())
-    do_pending_interrupt (); 
+
+  if (!in_pseudo_atomic)
+    {
+      clr_pseudo_atomic_atomic ();
+      if (get_pseudo_atomic_interrupted ())
+	do_pending_interrupt ();
+    }
+  
   return result; 
 }
 
-- 
GitLab