From bce8fc84f8d8c7ccb612342f46d305d1a376526a Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 30 Dec 2013 16:18:55 -0700 Subject: [PATCH] fix ordering bug in place termination This bug was introduced in 94771f16ed, moving a local-variable initialization to after its use. --- racket/src/racket/src/place.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/racket/src/racket/src/place.c b/racket/src/racket/src/place.c index 0979d6be3c..0cbbbc448e 100644 --- a/racket/src/racket/src/place.c +++ b/racket/src/racket/src/place.c @@ -2557,7 +2557,11 @@ static void terminate_current_place(Scheme_Object *result) place_obj = place_object; place_object = NULL; - + + mzrt_mutex_lock(place_obj->lock); + place_obj_die = place_obj->die; + mzrt_mutex_unlock(place_obj->lock); + /*printf("Leavin place: proc thread id%u\n", ptid);*/ /* Beware that the destroy operation might trigger a GC to cooperate @@ -2568,7 +2572,6 @@ static void terminate_current_place(Scheme_Object *result) mzrt_mutex_lock(place_obj->lock); - place_obj_die = place_obj->die; place_obj->refcount--; refcount = place_obj->refcount;