From 55e35ffb64390ea27683c3a146fdaa7e32e3f30c Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Thu, 22 Oct 2026 09:27:19 -0700 Subject: [PATCH 1/3] chore(quest): claim quest/m0/release-backports/ffi-cancellation.md Quest-Claim: ca45993f77dc0e1a From 916cfaa063309c9d9905f69dba179c8b0bf0728a Mon Sep 17 00:00:00 2001 From: Luke Curley <432854+kixelated@users.noreply.github.com> Date: Thu, 22 Oct 2026 10:28:23 -0700 Subject: [PATCH 2/3] quest: track the prepared release FFI cancellation backport The paired ownership fix and direct UniFFI boundary tests are ready in release PR #6355. All local release checks and all 32 interop pairs pass. Keep the quest until that release PR merges. Co-Authored-By: GPT-6 --- .../m0/release-backports/ffi-cancellation.md | 31 ++++++------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/quest/m0/release-backports/ffi-cancellation.md b/quest/m0/release-backports/ffi-cancellation.md index 87ca93ef3b..b50e32f4a5 100644 --- a/quest/m0/release-backports/ffi-cancellation.md +++ b/quest/m0/release-backports/ffi-cancellation.md @@ -1,4 +1,4 @@ -# [M] Backport cancellation-safe FFI reads and accepts +# [XS] Land cancellation-safe FFI reads and accepts ## Goal @@ -9,27 +9,16 @@ shutdown remains safe. Published signatures and wire behavior stay intact. ## Plan -Decided 2026-10-22 (maintainer): include the paired fixes from -[moq-dev/moq#5140](https://github.com/moq-dev/moq/pull/5140) and -[moq-dev/moq#5172](https://github.com/moq-dev/moq/pull/5172) in the focused -backports. Treat read and accept cancellation together because the server's -synchronous cancellation constrains how its pending accept is driven. +The paired read/accept ownership fixes are implemented in +[the release backport](https://github.com/moq-dev/moq/pull/6355), preserving +published signatures and the release runtime/listener APIs. Its tests exercise +the actual UniFFI cancel/free boundary, including delivery before freeing. -Release 36f392f492 still spawns Task::run work independently. UniFFI's foreign -cancel stops polling before the future is freed, so spawned work can keep -running and take an event during that interval. Reproduce through the actual -UniFFI cancel/free boundary, including delivery between cancellation and -freeing; merely dropping a Rust future does not establish the contract. - -Port ownership of pending operations from the two fixes while retaining the -release runtime and listener APIs. Preserve bounded incoming-request storage, -listener release during a parked accept, and synchronization with runtime -shutdown. Do not import main's later worker-pool or transport redesigns. -Cover read/accept cancellation, the next caller's event, server cancellation, -and runtime shutdown with deterministic synchronization. Run affected binding -checks and just test interop --all in addition to the release gate. The -consumers are existing foreign-language readers and native binding servers; -no wrapper migration or new API is intended. +The release-pinned check gate, 159 FFI tests, 73 Python tests, and all 32 +interop publisher/subscriber pairs pass. Remaining work is to land that PR +after review and CI. Delete this quest and its links once +the backport merges into `release`; the tracking update alone does not finish +it. Keep the additive draining-shutdown API in its separate backport. ## Related From 1084e7e80bb96d5295c806540ba36495c6655315 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 22 Oct 2026 11:30:28 -0700 Subject: [PATCH 3/3] quest: finish the release FFI cancellation backport https://github.com/moq-dev/moq/pull/6355 merged into release, so delete the quest and its epic link. Co-Authored-By: Claude Opus 5.5 --- quest/m0/release-backports/README.md | 1 - .../m0/release-backports/ffi-cancellation.md | 25 ------------------- 2 files changed, 26 deletions(-) delete mode 100644 quest/m0/release-backports/ffi-cancellation.md diff --git a/quest/m0/release-backports/README.md b/quest/m0/release-backports/README.md index d2f54d4c89..b50e9c4a25 100644 --- a/quest/m0/release-backports/README.md +++ b/quest/m0/release-backports/README.md @@ -49,7 +49,6 @@ findings; expanding this shortlist needs a separate scope decision. - [TLS dependencies](/quest/m0/release-backports/tls.md) - release takes the targeted WebPKI fixes already on main - [JS input parsing](/quest/m0/release-backports/parsing.md) - malformed certificates and paths cannot trigger disproportionate parsing work -- [FFI cancellation](/quest/m0/release-backports/ffi-cancellation.md) - cancelled reads and accepts leave the next event for the next caller ## Related diff --git a/quest/m0/release-backports/ffi-cancellation.md b/quest/m0/release-backports/ffi-cancellation.md deleted file mode 100644 index b50e32f4a5..0000000000 --- a/quest/m0/release-backports/ffi-cancellation.md +++ /dev/null @@ -1,25 +0,0 @@ -# [XS] Land cancellation-safe FFI reads and accepts - -## Goal - -On the current release line, cancelling a foreign read or accept cannot -consume the next frame or incoming session. Existing synchronous server -cancellation still releases its listener without deadlocking, and runtime -shutdown remains safe. Published signatures and wire behavior stay intact. - -## Plan - -The paired read/accept ownership fixes are implemented in -[the release backport](https://github.com/moq-dev/moq/pull/6355), preserving -published signatures and the release runtime/listener APIs. Its tests exercise -the actual UniFFI cancel/free boundary, including delivery before freeing. - -The release-pinned check gate, 159 FFI tests, 73 Python tests, and all 32 -interop publisher/subscriber pairs pass. Remaining work is to land that PR -after review and CI. Delete this quest and its links once -the backport merges into `release`; the tracking update alone does not finish -it. Keep the additive draining-shutdown API in its separate backport. - -## Related - -- [Draining shutdown](/quest/m0/ffi-shutdown-backport.md) - coordinate overlapping FFI files while keeping its additive drain API in its own backport