From 4ce547c78a9bd6045ae373bab02b7238081ad93f Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 24 Dec 2007 13:03:29 +0000 Subject: [PATCH] fix Windows-specific bg thread clean-up (PR 9119) svn: r8117 --- src/mzscheme/src/port.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mzscheme/src/port.c b/src/mzscheme/src/port.c index 9661836195..40e2ba6238 100644 --- a/src/mzscheme/src/port.c +++ b/src/mzscheme/src/port.c @@ -945,10 +945,12 @@ void scheme_forget_subthread(struct Scheme_Thread_Memory *tm) void scheme_suspend_remembered_threads(void) { Scheme_Thread_Memory *tm, *next, *prev = NULL; + int keep; for (tm = tm_start; tm; tm = next) { next = tm->next; + keep = 1; if (tm->autoclose) { if (WaitForSingleObject(tm->handle, 0) == WAIT_OBJECT_0) { CloseHandle((HANDLE)tm->handle); @@ -964,16 +966,20 @@ void scheme_suspend_remembered_threads(void) #ifdef MZ_PRECISE_GC free(tm); #endif + keep = 0; } } - if (tm->handle) { + if (keep) { SuspendThread((HANDLE)tm->handle); if (tm->subhandle) SuspendThread((HANDLE)tm->subhandle); prev = tm; } } + + if (prev) + prev->next = NULL; } void scheme_resume_remembered_threads(void)