On Mon, 2013-05-06 at 19:23 -0600, Erich E. Hoover wrote:
--- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -210,8 +210,14 @@ DWORD WINAPI AllocateAndGetIpAddrTableFromStack(PMIB_IPADDRTABLE *ppIpAddrTable, */ BOOL WINAPI CancelIPChangeNotify(LPOVERLAPPED overlapped) {
- FIXME("(overlapped %p): stub\n", overlapped);
- return FALSE;
- HANDLE handle;
- TRACE("(overlapped %p)\n", overlapped);
- if (!overlapped)
return FALSE;
- handle = (HANDLE) overlapped->u.Pointer;
- return TerminateThread(handle, STATUS_CANCELLED);
}
TerminateThread is not the right tool here. If the thread is blocked on the recv call while being terminated it will leak the netlink socket.
You'd need a way to synchronize the threads, but an overhead of one thread per caller is rather costly in the first place. This suggests that the server should poll the socket.