diff options
Diffstat (limited to 'src/w32.c')
| -rw-r--r-- | src/w32.c | 8 |
1 files changed, 7 insertions, 1 deletions
| @@ -6092,6 +6092,7 @@ term_winsock (void) | |||
| 6092 | { | 6092 | { |
| 6093 | if (winsock_lib != NULL && winsock_inuse == 0) | 6093 | if (winsock_lib != NULL && winsock_inuse == 0) |
| 6094 | { | 6094 | { |
| 6095 | release_listen_threads (); | ||
| 6095 | /* Not sure what would cause WSAENETDOWN, or even if it can happen | 6096 | /* Not sure what would cause WSAENETDOWN, or even if it can happen |
| 6096 | after WSAStartup returns successfully, but it seems reasonable | 6097 | after WSAStartup returns successfully, but it seems reasonable |
| 6097 | to allow unloading winsock anyway in that case. */ | 6098 | to allow unloading winsock anyway in that case. */ |
| @@ -7076,7 +7077,12 @@ _sys_wait_accept (int fd) | |||
| 7076 | rc = pfn_WSAEventSelect (SOCK_HANDLE (fd), hEv, FD_ACCEPT); | 7077 | rc = pfn_WSAEventSelect (SOCK_HANDLE (fd), hEv, FD_ACCEPT); |
| 7077 | if (rc != SOCKET_ERROR) | 7078 | if (rc != SOCKET_ERROR) |
| 7078 | { | 7079 | { |
| 7079 | rc = WaitForSingleObject (hEv, INFINITE); | 7080 | do { |
| 7081 | rc = WaitForSingleObject (hEv, 500); | ||
| 7082 | Sleep (5); | ||
| 7083 | } while (rc == WAIT_TIMEOUT | ||
| 7084 | && cp->status != STATUS_READ_ERROR | ||
| 7085 | && cp->char_avail); | ||
| 7080 | pfn_WSAEventSelect (SOCK_HANDLE (fd), NULL, 0); | 7086 | pfn_WSAEventSelect (SOCK_HANDLE (fd), NULL, 0); |
| 7081 | if (rc == WAIT_OBJECT_0) | 7087 | if (rc == WAIT_OBJECT_0) |
| 7082 | cp->status = STATUS_READ_SUCCEEDED; | 7088 | cp->status = STATUS_READ_SUCCEEDED; |