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