Skip to content

fix(waitset): deregister cancelled broadcast receivers#116

Draft
orthur2 wants to merge 1 commit into
fast:mainfrom
orthur2:fix/waitset-broadcast-cancel
Draft

fix(waitset): deregister cancelled broadcast receivers#116
orthur2 wants to merge 1 commit into
fast:mainfrom
orthur2:fix/waitset-broadcast-cancel

Conversation

@orthur2

@orthur2 orthur2 commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

This PR follows the discussion in #115.

WaitSet previously identified registrations with bare slab indices. After wake_all drained the slab, a new waiter could reuse an index while an old future still retained it. This PR changes the registration identity to WaiterId { index, generation } and checks both values before updating or removing a waiter.

WaitSet now provides remove_waker for removing one registration and take_wakers for draining registrations before waking them outside the lock.

Cancellation cleanup is limited to broadcast::overflow::Recv. Ready paths clear the waiter id, so normally completed receive futures do not take the WaitSet lock from Drop. A pending receive removes its registration when it is cancelled.

Latch, Once, and WaitGroup keep their previous cancellation behavior. Barrier::wait also remains not cancel safe, matching tokio::sync::Barrier.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant