simple-ipc/ipc-win32: add trace2 debugging

Create "ipc-debug" category events to log unexpected errors
when creating Simple-IPC connections.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff Hostetler 2021-09-20 15:36:15 +00:00 committed by Junio C Hamano
parent 59c923229e
commit 9bd51d4975
1 changed files with 24 additions and 1 deletions

View File

@ -49,6 +49,9 @@ static enum ipc_active_state get_active_state(wchar_t *pipe_path)
if (GetLastError() == ERROR_FILE_NOT_FOUND) if (GetLastError() == ERROR_FILE_NOT_FOUND)
return IPC_STATE__PATH_NOT_FOUND; return IPC_STATE__PATH_NOT_FOUND;


trace2_data_intmax("ipc-debug", NULL, "getstate/waitpipe/gle",
(intmax_t)GetLastError());

return IPC_STATE__OTHER_ERROR; return IPC_STATE__OTHER_ERROR;
} }


@ -109,9 +112,15 @@ static enum ipc_active_state connect_to_server(
t_start_ms = (DWORD)(getnanotime() / 1000000); t_start_ms = (DWORD)(getnanotime() / 1000000);


if (!WaitNamedPipeW(wpath, timeout_ms)) { if (!WaitNamedPipeW(wpath, timeout_ms)) {
if (GetLastError() == ERROR_SEM_TIMEOUT) DWORD gleWait = GetLastError();

if (gleWait == ERROR_SEM_TIMEOUT)
return IPC_STATE__NOT_LISTENING; return IPC_STATE__NOT_LISTENING;


trace2_data_intmax("ipc-debug", NULL,
"connect/waitpipe/gle",
(intmax_t)gleWait);

return IPC_STATE__OTHER_ERROR; return IPC_STATE__OTHER_ERROR;
} }


@ -133,17 +142,31 @@ static enum ipc_active_state connect_to_server(
break; /* try again */ break; /* try again */


default: default:
trace2_data_intmax("ipc-debug", NULL,
"connect/createfile/gle",
(intmax_t)gle);

return IPC_STATE__OTHER_ERROR; return IPC_STATE__OTHER_ERROR;
} }
} }


if (!SetNamedPipeHandleState(hPipe, &mode, NULL, NULL)) { if (!SetNamedPipeHandleState(hPipe, &mode, NULL, NULL)) {
gle = GetLastError();
trace2_data_intmax("ipc-debug", NULL,
"connect/setpipestate/gle",
(intmax_t)gle);

CloseHandle(hPipe); CloseHandle(hPipe);
return IPC_STATE__OTHER_ERROR; return IPC_STATE__OTHER_ERROR;
} }


*pfd = _open_osfhandle((intptr_t)hPipe, O_RDWR|O_BINARY); *pfd = _open_osfhandle((intptr_t)hPipe, O_RDWR|O_BINARY);
if (*pfd < 0) { if (*pfd < 0) {
gle = GetLastError();
trace2_data_intmax("ipc-debug", NULL,
"connect/openosfhandle/gle",
(intmax_t)gle);

CloseHandle(hPipe); CloseHandle(hPipe);
return IPC_STATE__OTHER_ERROR; return IPC_STATE__OTHER_ERROR;
} }