From f94b9f43770526bb12fc7aebb79c581aa14422c2 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 11 Feb 2010 04:29:28 +0000 Subject: [PATCH] avoid a stack overflow with deeply call-in-nested threads svn: r18046 --- src/mzscheme/src/thread.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/mzscheme/src/thread.c b/src/mzscheme/src/thread.c index 69ff301437..c1ed1138df 100644 --- a/src/mzscheme/src/thread.c +++ b/src/mzscheme/src/thread.c @@ -1974,11 +1974,16 @@ void scheme_schedule_custodian_close(Scheme_Custodian *c) static void check_scheduled_kills() { + Scheme_Object *kl, *k; + while (scheduled_kills && !SCHEME_NULLP(scheduled_kills)) { - Scheme_Object *k; - k = SCHEME_CAR(scheduled_kills); - scheduled_kills = SCHEME_CDR(scheduled_kills); - scheme_close_managed((Scheme_Custodian *)k); + kl = scheduled_kills; + scheduled_kills = scheme_null; + while (!SCHEME_NULLP(kl)) { + k = SCHEME_CAR(kl); + kl = SCHEME_CDR(kl); + scheme_close_managed((Scheme_Custodian *)k); + } } }