fix: address race condition in continuation-based waiting

Add recheck of message count after acquiring lock and before storing
continuation to prevent race where message arrives between initial
count check and continuation install.

Addresses Codex review feedback on PR #931.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
jack
2026-01-04 14:18:40 -10:00
co-authored by Claude Opus 4.5
parent 1b4f120014
commit 869d766f8d
@@ -263,6 +263,13 @@ extension FragmentationTests {
group.addTask {
await withCheckedContinuation { continuation in
self.lock.lock()
// Recheck count after acquiring lock to avoid race condition
// where message arrives between initial check and continuation install
if self._publicMessages.count >= count {
self.lock.unlock()
continuation.resume()
return
}
self.publicMessageContinuation = continuation
self.lock.unlock()
}
@@ -290,6 +297,13 @@ extension FragmentationTests {
group.addTask {
await withCheckedContinuation { continuation in
self.lock.lock()
// Recheck count after acquiring lock to avoid race condition
// where message arrives between initial check and continuation install
if self._receivedMessages.count >= count {
self.lock.unlock()
continuation.resume()
return
}
self.receivedMessageContinuation = continuation
self.lock.unlock()
}