From 21ede0418ef47c5fa0d565cd1fc85b879251e811 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Wed, 11 Nov 2026 18:15:02 -0800 Subject: [PATCH 1/3] quest: a moq-lite-06 session's auth requests end when its peer leaves Co-Authored-By: Claude Opus 5.5 --- quest/m1/lite06-requests-end.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 quest/m1/lite06-requests-end.md diff --git a/quest/m1/lite06-requests-end.md b/quest/m1/lite06-requests-end.md new file mode 100644 index 0000000000..d887d2d67b --- /dev/null +++ b/quest/m1/lite06-requests-end.md @@ -0,0 +1,29 @@ +# [S] A moq-lite-06 session's auth requests end when its peer leaves + +## Goal + +On a moq-lite-06 session, the server's `Request::requests()` stream ends once +the client cancels or the connection closes, as it does on lite-07 and +moq-transport. A server loop draining it then ends instead of holding a task, +and its session, for each departed lite-06 client. + +## Plan + +Decided 2026-11-11 (maintainer, /quest-complete pick of +[moq-dev/moq#8516](https://github.com/moq-dev/moq/pull/8516)): ✅ plan this in +m1 (rejected: m3; ignoring it). + +Found while iterating #8516: in `rs/moq-ffi/src/test.rs`, +`a_credential_without_auth_is_unsupported` dials a `token_server("moq-lite-06")` +whose task drains `request.requests()` in a `while let`. After the client's +`session.cancel(0)`, that loop never ends, so the test calls +`serving.abort()`. Not yet investigated: whether the stream misses the close, +or the session the server holds keeps it alive. + +- Reproduce in moq-net or moq-tokio with a lite-06 pair: the client cancels, + and the server's `requests()` must yield `None` within the test's timeout. + Check lite-07 and moq-transport the same way. +- Fix the root cause, then drop `serving.abort()` from that test so it + asserts the server task ends on its own. + +Public API: none expected. Wire: none. From a0565e426a94215b02b83e666881a303c2897c20 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Wed, 11 Nov 2026 18:15:59 -0800 Subject: [PATCH 2/3] quest: point lite06-requests-end at the session driver --- quest/m1/lite06-requests-end.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/quest/m1/lite06-requests-end.md b/quest/m1/lite06-requests-end.md index d887d2d67b..a26a90a8a9 100644 --- a/quest/m1/lite06-requests-end.md +++ b/quest/m1/lite06-requests-end.md @@ -17,8 +17,12 @@ Found while iterating #8516: in `rs/moq-ffi/src/test.rs`, `a_credential_without_auth_is_unsupported` dials a `token_server("moq-lite-06")` whose task drains `request.requests()` in a `while let`. After the client's `session.cancel(0)`, that loop never ends, so the test calls -`serving.abort()`. Not yet investigated: whether the stream misses the close, -or the session the server holds keeps it alive. +`serving.abort()` (the test lands with that PR). The queue behind +`requests()` closes only through `auth::Handle::close`, which every moq-lite +version reaches from `Driver::end` or `Driver`'s `Drop` in +`rs/moq-net/src/lite/session.rs`. So suspect the lite-06 driver not ending +(it has no session stream to see the peer leave) or the server keeping it +alive, rather than the stream itself. - Reproduce in moq-net or moq-tokio with a lite-06 pair: the client cancels, and the server's `requests()` must yield `None` within the test's timeout. From f0622a6de9c04bc3c7f0cc7583e28b7dbb0b2f26 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Wed, 11 Nov 2026 18:16:12 -0800 Subject: [PATCH 3/3] quest: hedge the lite06 driver suspicion --- quest/m1/lite06-requests-end.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quest/m1/lite06-requests-end.md b/quest/m1/lite06-requests-end.md index a26a90a8a9..db73dc7d40 100644 --- a/quest/m1/lite06-requests-end.md +++ b/quest/m1/lite06-requests-end.md @@ -21,8 +21,8 @@ whose task drains `request.requests()` in a `while let`. After the client's `requests()` closes only through `auth::Handle::close`, which every moq-lite version reaches from `Driver::end` or `Driver`'s `Drop` in `rs/moq-net/src/lite/session.rs`. So suspect the lite-06 driver not ending -(it has no session stream to see the peer leave) or the server keeping it -alive, rather than the stream itself. +(check what it watches to see the peer leave; see `has_setup_stream`) or the +server keeping it alive, rather than the stream itself. - Reproduce in moq-net or moq-tokio with a lite-06 pair: the client cancels, and the server's `requests()` must yield `None` within the test's timeout.