Skip to content

Fix vehicle SSE listener leak on device uninit#16

Merged
Bre77 merged 1 commit into
mainfrom
fm/homey-r2-sse-teardown
Jul 22, 2026
Merged

Fix vehicle SSE listener leak on device uninit#16
Bre77 merged 1 commit into
mainfrom
fm/homey-r2-sse-teardown

Conversation

@Bre77

@Bre77 Bre77 commented Jul 22, 2026

Copy link
Copy Markdown
Member

Intent

  • Fix a listener leak/over-broad teardown in VehicleDevice.onUninit
    • Root cause: onUninit called this.vehicle.sse.data.removeAllListeners(), which wipes every listener on the shared per-vehicle SSE emitter, not just this device's own - including any SDK-internal listeners. It also never touched the state/connectivity listeners registered directly on this.vehicle.sse (as opposed to .sse.data), so those leaked and could double-register on device re-init or repair.
    • Fix: track every signal listener via a small onSignal wrapper that records the SDK's own unsubscribe function, and hoist the state/connectivity handlers to named class fields so onUninit can off() exactly what it registered - the same per-handler cleanup pattern already used in the energy drivers (e.g. drivers/battery/device.ts).
  • Add test/vehicle-sse-teardown.test.ts proving onUninit removes exactly the device's own listeners from the shared emitter and leaves an unrelated listener untouched.

VehicleDevice.onUninit called sse.data.removeAllListeners(), which wipes
every listener on the shared per-vehicle emitter (including any owned by
the SDK) and never touched the state/connectivity listeners registered
directly on sse. Register signals through a tracked onSignal wrapper and
off() the state/connectivity handlers explicitly, mirroring the pattern
already used in the energy drivers.
@Bre77
Bre77 merged commit 63de2af into main Jul 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant