From a701c4f4264b7c33c37182b79bd4f4b2b7677254 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 11 Mar 2009 18:35:38 +0000 Subject: [PATCH] fix bug related to sleeping and Windows networking (take 2) svn: r14055 --- src/mred/mredmsw.cxx | 7 +++---- src/mzscheme/src/port.c | 6 ++---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/mred/mredmsw.cxx b/src/mred/mredmsw.cxx index 5056e41a7d..70514cdc68 100644 --- a/src/mred/mredmsw.cxx +++ b/src/mred/mredmsw.cxx @@ -42,6 +42,7 @@ extern long last_msg_time; extern "C" { struct Scheme_Thread_Memory *scheme_remember_thread(void *); void scheme_forget_thread(struct Scheme_Thread_Memory *); + void scheme_interrupt_win32_thread(HANDLE th); }; static int found_nothing; @@ -959,6 +960,7 @@ void MrEdMSWSleep(float secs, void *fds) if (r->set.fd_count || w->set.fd_count || e->set.fd_count) { fake = socket(PF_INET, SOCK_STREAM, 0); FD_SET(fake, e); + FD_SET(fake, r); th2 = CreateThread(NULL, 4096, (LPTHREAD_START_ROUTINE)signal_fddone, @@ -984,10 +986,7 @@ void MrEdMSWSleep(float secs, void *fds) } if (th2) { - while (closesocket(fake)) { - if (WSAGetLastError() != WSAEINPROGRESS) - break; - } + closesocket(fake); WaitForSingleObject(th2, INFINITE); scheme_forget_thread(thread_memory); CloseHandle(th2); diff --git a/src/mzscheme/src/port.c b/src/mzscheme/src/port.c index 2c7398d3ff..56554dc79b 100644 --- a/src/mzscheme/src/port.c +++ b/src/mzscheme/src/port.c @@ -8064,6 +8064,7 @@ static void default_sleep(float v, void *fds) fake = socket(MZ_PF_INET, SOCK_STREAM, 0); FD_SET(fake, ex); + FD_SET(fake, rd); info->rd = rd; info->wr = wr; @@ -8103,10 +8104,7 @@ static void default_sleep(float v, void *fds) clean_up_wait(result, array, rps, count); /* cause selector thread to end: */ - while (closesocket(fake)) { - if (WSAGetLastError() != WSAEINPROGRESS) - break; - } + closesocket(fake); WaitForSingleObject(th, INFINITE); scheme_forget_thread(thread_memory);