Skip to content

fix: discard expired negotiations and serialize ICE restart cleanup - #502

Merged
devopvoid merged 1 commit into
mainfrom
fix-negotiation-operation-timeouts
Oct 31, 2026
Merged

devopvoid merged 1 commit into
mainfrom
fix-negotiation-operation-timeouts

Conversation

@devopvoid

Copy link
Copy Markdown
Owner

An operation timeout previously completed only the outer future, allowing a delayed ICE restart response to apply a remote description after the next operation had started. Expire the awaited operation steps, discard late responses, and restore stable signaling before advancing the queue. Close the peer if recovery itself cannot finish.

Complete HTTP ICE restart cleanup on the serialized control executor before releasing the operation, and associate cleanup with its own request so it cannot clear a later restart or restore obsolete ICE credentials. Process accepted restart responses on control as well.

Add deterministic regression coverage for delayed restart answers in both signaling roles and successive HTTP restarts while the event executor is paused. All 145 tests across NegotiationTimeoutTests, PeerTests, HttpIceTests, HttpSessionTests, RuntimeCloseTests, and SerialExecutorTests pass; the regression scenarios fail against the original code.

@devopvoid
devopvoid merged commit 5ba8d7e into main Oct 31, 2026
22 checks passed
@devopvoid
devopvoid deleted the fix-negotiation-operation-timeouts branch October 31, 2026 23:43
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