Skip to content

Commit

Permalink
Backport parts of EventPipe PR 43711 not currently in C library. (#46214
Browse files Browse the repository at this point in the history
)
  • Loading branch information
lateralusX authored Jan 7, 2021
1 parent 15be630 commit 6b606df
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
15 changes: 9 additions & 6 deletions src/native/eventpipe/ds-ipc-win32.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,13 +429,14 @@ ds_ipc_accept (
if (!success) {
if (callback)
callback ("Failed to GetOverlappedResults for NamedPipe server", GetLastError());
ep_raise_error ();
// close the pipe (cleanup and reset below)
CloseHandle (ipc->pipe);
} else {
// create new IpcStream using handle (passes ownership to pStream)
stream = ipc_stream_alloc (ipc->pipe, DS_IPC_CONNECTION_MODE_LISTEN);
ep_raise_error_if_nok (stream != NULL);
}

// create new IpcStream using handle and reset the Server object so it can listen again
stream = ipc_stream_alloc (ipc->pipe, DS_IPC_CONNECTION_MODE_LISTEN);
ep_raise_error_if_nok (stream != NULL);

// reset the server
ipc->pipe = INVALID_HANDLE_VALUE;
ipc->is_listening = false;
Expand Down Expand Up @@ -637,6 +638,7 @@ ipc_stream_read_func (
DS_EXIT_BLOCKING_PAL_SECTION;
}
}
// error is unrecoverable, so return as such
}

*bytes_read = (uint32_t)read;
Expand Down Expand Up @@ -690,7 +692,7 @@ ipc_stream_write_func (
ipc_stream->pipe, // pipe
overlap, // overlapped
&written, // out actual number of bytes written
true) != FALSE; // block until async IO completes
true) != FALSE; // block until async IO completes
} else {
// We either timed out or something else went wrong.
// For any error, attempt to cancel IO and ensure the cancel happened
Expand All @@ -707,6 +709,7 @@ ipc_stream_write_func (
DS_EXIT_BLOCKING_PAL_SECTION;
}
}
// error is unrecoverable, so return as such
}

*bytes_written = (uint32_t)written;
Expand Down
2 changes: 2 additions & 0 deletions src/native/eventpipe/ds-ipc.c
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,8 @@ ds_ipc_stream_factory_get_next_available_stream (ds_ipc_error_callback_func call
EP_ASSERT (port != NULL);
if (!stream) { // only use first signaled stream; will get others on subsequent calls
stream = ds_port_get_connected_stream_vcall (port, callback);
if (!stream)
saw_error = true;
_ds_current_port = port;
}
DS_LOG_INFO_2 ("ds_ipc_stream_factory_get_next_available_stream - SIG :: Poll attempt: %d, connection %d signalled.\n", poll_attempts, connection_id);
Expand Down

0 comments on commit 6b606df

Please sign in to comment.