fix: add timeout handling for Daily room join/leave operations #3131
+17
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The Daily transport's
_join()and_leave()methods can hang indefinitely when the Daily completion callbacks fail to fire. This occurs because both methods useawait futurewithout timeout protection, waiting for thecompletion_callbackto set the future's result.When this happens:
leave()operation never completeson_leftevent never firesThis issue was discovered in production where a call termination hung indefinitely at
transport.leave(), preventing cleanup.Solution
Add timeout protection to both
_join()and_leave()operations:Added module-level timeout constants (30 seconds each)
DAILY_JOIN_TIMEOUT_SECS = 30.0DAILY_LEAVE_TIMEOUT_SECS = 30.0Wrapped async operations with
asyncio.wait_for()Symmetric error handling
_join()returns(None, error_msg)tuple on timeout (matching its error signature)_leave()returnserror_msgstring on timeout (matching its error signature)