racket/place: avoid place-termination cycle

This commit is contained in:
Matthew Flatt 2012-06-04 04:31:53 +08:00
parent 3742a9da8f
commit 53f7a77e8f

View File

@ -512,7 +512,8 @@ static void do_place_kill(Scheme_Place *place)
{ {
mzrt_mutex_lock(place_obj->lock); mzrt_mutex_lock(place_obj->lock);
place_obj->die = 1; if (!place_obj->die)
place_obj->die = 1;
place_obj->refcount--; place_obj->refcount--;
refcount = place_obj->refcount; refcount = place_obj->refcount;
@ -2269,6 +2270,8 @@ void scheme_place_check_for_interruption()
local_die = place_obj->die; local_die = place_obj->die;
local_break = place_obj->pbreak; local_break = place_obj->pbreak;
local_pause = place_obj->pause; local_pause = place_obj->pause;
if (local_die)
place_obj->die = -1;
place_obj->pbreak = 0; place_obj->pbreak = 0;
if (local_pause) if (local_pause)
place_obj->pausing = 1; place_obj->pausing = 1;
@ -2284,7 +2287,7 @@ void scheme_place_check_for_interruption()
break; break;
} }
if (local_die) if (local_die > 0)
scheme_kill_thread(scheme_main_thread); scheme_kill_thread(scheme_main_thread);
if (local_break) if (local_break)
scheme_break_thread(NULL); scheme_break_thread(NULL);