Skip to content

Commit

Permalink
fix: Fix event listener leaks in Player (#4229)
Browse files Browse the repository at this point in the history
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
joeyparrish committed May 17, 2022
1 parent dec3d9c commit e6c3b22
Showing 1 changed file with 129 additions and 127 deletions.

0 comments on commit e6c3b22

Please sign in to comment.