better solution for rev 18046

svn: r18072
This commit is contained in:
Matthew Flatt 2010-02-12 19:16:00 +00:00
parent b3d9330672
commit d12e3e8c4f

View File

@ -1630,7 +1630,7 @@ static void for_each_managed(Scheme_Type type, Scheme_For_Each_Func cf)
} }
} }
void scheme_close_managed(Scheme_Custodian *m) static void do_close_managed(Scheme_Custodian *m)
/* The trick is that we may need to kill the thread /* The trick is that we may need to kill the thread
that is running us. If so, delay it to the very that is running us. If so, delay it to the very
end. */ end. */
@ -1643,6 +1643,12 @@ void scheme_close_managed(Scheme_Custodian *m)
scheme_thread_block(0.0); scheme_thread_block(0.0);
} }
}
void scheme_close_managed(Scheme_Custodian *m)
{
do_close_managed(m);
/* Give killed threads time to die: */ /* Give killed threads time to die: */
scheme_thread_block(0); scheme_thread_block(0);
scheme_current_thread->ran_some = 1; scheme_current_thread->ran_some = 1;
@ -1974,16 +1980,11 @@ void scheme_schedule_custodian_close(Scheme_Custodian *c)
static void check_scheduled_kills() static void check_scheduled_kills()
{ {
Scheme_Object *kl, *k;
while (scheduled_kills && !SCHEME_NULLP(scheduled_kills)) { while (scheduled_kills && !SCHEME_NULLP(scheduled_kills)) {
kl = scheduled_kills; Scheme_Object *k;
scheduled_kills = scheme_null; k = SCHEME_CAR(scheduled_kills);
while (!SCHEME_NULLP(kl)) { scheduled_kills = SCHEME_CDR(scheduled_kills);
k = SCHEME_CAR(kl); do_close_managed((Scheme_Custodian *)k);
kl = SCHEME_CDR(kl);
scheme_close_managed((Scheme_Custodian *)k);
}
} }
} }