racket/place: avoid place-termination cycle
This commit is contained in:
parent
3742a9da8f
commit
53f7a77e8f
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user