Bug: Event Listener Memory Leak in useMediaRecorder Hook
The useMediaRecorder and useNewMediaRecorder hooks attach event listeners to MediaRecorder instances using addEventListener, but never remove them. When recording is started multiple times, new MediaRecorder instances are created while old listeners remain attached to abandoned instances.
This leads to memory leaks and increasing memory usage over time.
Observed Behavior
Both hooks register event listeners on MediaRecorder objects using addEventListener:
-
dataavailable -
stop
These listeners are added every time recording starts. However, they are never removed when recording stops or when a new recorder instance is created.
As a result, listeners accumulate across multiple recording sessions.
Why This Is Incorrect
Event listeners must be explicitly removed when an object is no longer needed. In this case:
-
MediaRecorderinstances are recreated on each recording session - Old recorder instances are abandoned
- Event listeners remain attached to those instances
This prevents garbage collection and causes memory leaks.
Steps to Reproduce
- Use the audio or video recording feature in EmbeddedChat.
- Start recording.
- Stop recording.
- Start recording again (a new
MediaRecorderinstance is created). - Repeat steps 2–4 multiple times.
- Observe browser memory usage using developer tools.
Memory usage increases steadily due to unreleased MediaRecorder instances.