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;
DS_EXIT_BLOCKING_PAL_SECTION;
}
}
+ // error is unrecoverable, so return as such
}
*bytes_read = (uint32_t)read;
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
DS_EXIT_BLOCKING_PAL_SECTION;
}
}
+ // error is unrecoverable, so return as such
}
*bytes_written = (uint32_t)written;
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);