mirror of
https://github.com/moparisthebest/curl
synced 2025-01-11 14:08:07 -05:00
sockfilt: make select_ws stop waiting on exit signal event
This makes sure that select_ws behaves similar to real select which stops waiting on a signal handler being triggered. This makes it possible to gracefully stop sockfilt.exe on Windows with taskkill /IM sockfilt.exe (without /F force flag). Reviewed-by: Jay Satiro Part of #5260
This commit is contained in:
parent
7dc8a981fa
commit
0e058776c0
@ -676,7 +676,7 @@ static int select_ws(int nfds, fd_set *readfds, fd_set *writefds,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* allocate internal array for the internal event handles */
|
/* allocate internal array for the internal event handles */
|
||||||
handles = calloc(nfds, sizeof(HANDLE));
|
handles = calloc(nfds + 1, sizeof(HANDLE));
|
||||||
if(handles == NULL) {
|
if(handles == NULL) {
|
||||||
CloseHandle(abort);
|
CloseHandle(abort);
|
||||||
CloseHandle(mutex);
|
CloseHandle(mutex);
|
||||||
@ -785,8 +785,18 @@ static int select_ws(int nfds, fd_set *readfds, fd_set *writefds,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* wait on the number of handles */
|
||||||
|
wait = nfd;
|
||||||
|
|
||||||
|
/* make sure we stop waiting on exit signal event */
|
||||||
|
if(exit_event) {
|
||||||
|
/* we allocated handles nfds + 1 for this */
|
||||||
|
handles[nfd] = exit_event;
|
||||||
|
wait += 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* wait for one of the internal handles to trigger */
|
/* wait for one of the internal handles to trigger */
|
||||||
wait = WaitForMultipleObjectsEx(nfd, handles, FALSE, timeout_ms, FALSE);
|
wait = WaitForMultipleObjectsEx(wait, handles, FALSE, timeout_ms, FALSE);
|
||||||
|
|
||||||
/* wait for internal mutex to lock event handling in threads */
|
/* wait for internal mutex to lock event handling in threads */
|
||||||
WaitForSingleObjectEx(mutex, INFINITE, FALSE);
|
WaitForSingleObjectEx(mutex, INFINITE, FALSE);
|
||||||
|
Loading…
Reference in New Issue
Block a user