Aug. 14, 2026
12:16 a.m.
Jinoh Kang (@iamahuman) commented about programs/services/rpc.c:
if (ret == WAIT_TIMEOUT) { WINE_ERR("receiving command result timed out\n"); + if (!CancelIoEx(process->control_pipe, &overlapped)) + WINE_ERR("Failed to cancel IO, %#lx\n", GetLastError()); *result = ERROR_SERVICE_REQUEST_TIMEOUT;
This has a subtle data race, since `result` doubles as the read buffer here. If the I/O completes right before this statement, then we will overwrite whatever result we have read from the pipe. The `result` write shall be done after I/O completion. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10424#note_148871