Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: Fix event listener leaks in Player (#4229)
Event listeners were being leaked in Player across load() / unload() cycles. This was fundamentally caused by the difficulty in keeping track of which event listeners to clean up at which stages of the load graph. Everything is cleaned up by Player.destroy() and EventManager.release(), but for a Player with heavy re-use, there was still a small leak. This fixes the leak by splitting the EventManager instance into three instances, each of which is cleaned up in a different part of the load graph life cycle. Listeners which should only live as long as a piece of content is loaded go into loadEventManager_. Listeners which should only live as long as we are attached to the video element go into attachEventManager_. Listeners which should live as long as the Player instance itself go into globalEventManager_. It is now impossible to miss unlistening to a particular event, since we no longer have to unlisten to any individual events at all. The removeAll() method of each event manager will clean up all listeners at the appropriate time.
- Loading branch information