Hi Hans, On 11/23/18 11:35 AM, Hans Leidekker wrote:
- DWORD status; - HANDLE thread; - struct resolve_args ra; - - ra.hostname = hostname; - ra.port = port; - ra.sa = sa; - - thread = CreateThread( NULL, 0, resolve_proc, &ra, 0, NULL ); - if (!thread) return FALSE; + struct async_resolve async;
- status = WaitForSingleObject( thread, timeout ); - if (status == WAIT_OBJECT_0) GetExitCodeThread( thread, &ret ); - else ret = ERROR_WINHTTP_TIMEOUT; - CloseHandle( thread ); + async.hostname = hostname; + async.port = port; + async.addr = addr; + if (!(async.done = CreateEventW( NULL, FALSE, FALSE, NULL ))) return FALSE; + if (!TrySubmitThreadpoolCallback( resolve_proc, &async, NULL ))
The patch looks good to me, but note that we could consider just using GetAddrInfoEx instead (although it doesn't support timeout yet). Jacek