fix(abr): guard abandon-rules check after destroy - #7938
Merged
robwalch merged 2 commits intoJul 21, 2026
Conversation
AmPlace
marked this pull request as ready for review
July 18, 2026 05:19
Contributor
Author
|
Thanks for landing the fix in #7939. Since this PR proposed the same Would you also consider merging the regression test as a small follow-up, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
hls.destroy()Observed behavior
The following exception was observed in Chrome 149 Stable on macOS while rapidly switching live HLS sources:
Original application-side workaround:
AmPlace/waveflow@e4fdbde
The exact browser scheduling or re-entrant path that causes the post-destroy invocation has not been isolated.
Confirmed failure path
AbrController.destroy()releases references by settingthis.hlstonull._abandonRulesCheckcurrently dereferenceshls.autoLevelEnabledwithout checking whether the controller has already been destroyed.The callback now returns when the controller no longer has an HLS instance. Active ABR behavior is unchanged. The regression test covers safe behavior after destroy; it does not claim to reproduce the macOS browser timing.
Fixes #7937
Checks
npm run type-checknpx eslint src/controller/abr-controller.ts tests/unit/controller/abr-controller.tsnpx prettier --check src/controller/abr-controller.ts tests/unit/controller/abr-controller.tsnpx es-check_abandonRulesCheckcallback afterhls.destroy()