firebase / firebase/firebase-js-sdk

Memory leak in MessagingService._delete() method

Open
#9,062 5 comments 0 reactions 0 assignees View on GitHub
api: messaging bug needs-attention
Dominant language
TypeScript
Stars
5.1k
Forks
1k
Avg merge
2d 21h
Merged PRs (30d)
37

Description

## Bug Description

The `MessagingService._delete()` method in the Firebase Messaging SDK has a memory leak issue where resources are not properly cleaned up when the service is deleted.

## Root Cause

The current implementation of `MessagingService._delete()` only returns `Promise.resolve()` without cleaning up:

1. **Timer leak**: The logging service starts a recursive `setTimeout` loop via `_processQueue()` that continues indefinitely
2. **Event listener leak**: Event listeners added in factory functions are never removed
3. **Missing cleanup**: No cleanup of message handlers, log events, or service worker references

## Impact

- Memory leaks when Firebase messaging service is deleted
- Timers continue running in the background
- Event listeners remain attached
- Potential performance degradation over time

## Affected Code

- `packages/messaging/src/messaging-service.ts` - `_delete()` method
- `packages/messaging/src/helpers/logToFirelog.ts` - `_processQueue()` timer management
- `packages/messaging/src/helpers/register.ts` - Event listener registration

## Comparison with Other Services

Other Firebase services like `AppCheckService` properly clean up their resources in `_delete()` methods by removing listeners and clearing state.

## Proposed Solution

Implement proper resource cleanup in `MessagingService._delete()` including:
- Clear logging timers
- Remove event listeners
- Reset all properties to initial state
- Clear message handlers and log events
- Provide cleanup mechanism for registered cleanup functions

## Environment

- Firebase JS SDK version: 11.8.1
- Affects both browser and service worker environments

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.