-
I'm trying to debug incorrectly closed streams in msquic and I'm trying to make sense of the logs.
What is the expected behavior of msquic, when the stream is closed before I understand this is an application error, which must be fixed. But I'm not observing any errors from msquic. What I'm also NOT observing is any new QUIC_CONNECTION_EVENT_PEER_STREAM_STARTED after the MAX_STREAMS has been reached. Thus, I'm left with hanging server side connection, waiting for new streams; and hanging HTTP/3 client waiting for the response. It all gets unblocked after a certain timeout, so it doesn't hang indefinitely. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 16 replies
-
Bad things happen if you close without shutting down completely: _IRQL_requires_max_(PASSIVE_LEVEL)
void
QuicStreamClose(
_In_ __drv_freesMem(Mem) QUIC_STREAM* Stream
)
{
if (!Stream->Flags.ShutdownComplete) {
if (Stream->Flags.Started) {
//
// TODO - If the stream hasn't been aborted already, then this is a
// fatal error for the connection. The QUIC transport cannot "just
// pick an error" to shutdown the stream with. It must abort the
// entire connection.
//
QuicTraceLogStreamWarning(
CloseWithoutShutdown,
Stream,
"Closing handle without fully shutting down");
} You trigger an implicit abort, BUT we don't have an error code to use for the abort! So we eventually just close with |
Beta Was this translation helpful? Give feedback.
Bad things happen if you close without shutting down completely: