better solution for rev 18046
svn: r18072
This commit is contained in:
parent
b3d9330672
commit
d12e3e8c4f
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user