From 53f7a77e8f14659de42ed872c3967ab8c72e64de Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 4 Jun 2012 04:31:53 +0800 Subject: [PATCH] racket/place: avoid place-termination cycle --- src/racket/src/place.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/racket/src/place.c b/src/racket/src/place.c index cc928d7764..fd092c1164 100644 --- a/src/racket/src/place.c +++ b/src/racket/src/place.c @@ -512,7 +512,8 @@ static void do_place_kill(Scheme_Place *place) { mzrt_mutex_lock(place_obj->lock); - place_obj->die = 1; + if (!place_obj->die) + place_obj->die = 1; place_obj->refcount--; refcount = place_obj->refcount; @@ -2269,6 +2270,8 @@ void scheme_place_check_for_interruption() local_die = place_obj->die; local_break = place_obj->pbreak; local_pause = place_obj->pause; + if (local_die) + place_obj->die = -1; place_obj->pbreak = 0; if (local_pause) place_obj->pausing = 1; @@ -2284,7 +2287,7 @@ void scheme_place_check_for_interruption() break; } - if (local_die) + if (local_die > 0) scheme_kill_thread(scheme_main_thread); if (local_break) scheme_break_thread(NULL);