fix Windows-specific bg thread clean-up (PR 9119)
svn: r8117
This commit is contained in:
parent
e3f8d7e74b
commit
4ce547c78a
|
@ -945,10 +945,12 @@ void scheme_forget_subthread(struct Scheme_Thread_Memory *tm)
|
||||||
void scheme_suspend_remembered_threads(void)
|
void scheme_suspend_remembered_threads(void)
|
||||||
{
|
{
|
||||||
Scheme_Thread_Memory *tm, *next, *prev = NULL;
|
Scheme_Thread_Memory *tm, *next, *prev = NULL;
|
||||||
|
int keep;
|
||||||
|
|
||||||
for (tm = tm_start; tm; tm = next) {
|
for (tm = tm_start; tm; tm = next) {
|
||||||
next = tm->next;
|
next = tm->next;
|
||||||
|
|
||||||
|
keep = 1;
|
||||||
if (tm->autoclose) {
|
if (tm->autoclose) {
|
||||||
if (WaitForSingleObject(tm->handle, 0) == WAIT_OBJECT_0) {
|
if (WaitForSingleObject(tm->handle, 0) == WAIT_OBJECT_0) {
|
||||||
CloseHandle((HANDLE)tm->handle);
|
CloseHandle((HANDLE)tm->handle);
|
||||||
|
@ -964,16 +966,20 @@ void scheme_suspend_remembered_threads(void)
|
||||||
#ifdef MZ_PRECISE_GC
|
#ifdef MZ_PRECISE_GC
|
||||||
free(tm);
|
free(tm);
|
||||||
#endif
|
#endif
|
||||||
|
keep = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tm->handle) {
|
if (keep) {
|
||||||
SuspendThread((HANDLE)tm->handle);
|
SuspendThread((HANDLE)tm->handle);
|
||||||
if (tm->subhandle)
|
if (tm->subhandle)
|
||||||
SuspendThread((HANDLE)tm->subhandle);
|
SuspendThread((HANDLE)tm->subhandle);
|
||||||
prev = tm;
|
prev = tm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prev)
|
||||||
|
prev->next = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void scheme_resume_remembered_threads(void)
|
void scheme_resume_remembered_threads(void)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user