Skip to content

fix: reuse shared AudioContext to prevent resource leak#48

Merged
AlexPeppas merged 1 commit intomasterfrom
fix/audiocontext-leak
Apr 4, 2026
Merged

fix: reuse shared AudioContext to prevent resource leak#48
AlexPeppas merged 1 commit intomasterfrom
fix/audiocontext-leak

Conversation

@johnkozaris
Copy link
Copy Markdown
Collaborator

Summary

  • playBell() created a new AudioContext on every call — these are limited OS resources (~6-8 per origin) that were never closed
  • Now uses a single shared module-level AudioContext that is lazily created and reused
  • Handles browser autoplay suspension by calling resume() if the context is suspended

Closes #46

Test plan

  • Trigger multiple bell sounds (sessions entering WaitingForInput) and verify audio still plays
  • Check DevTools for AudioContext count not growing (chrome://media-internals or equivalent)
  • Verify bell works after app has been idle (autoplay suspension case)

Each call to playBell() created a new AudioContext that was never closed.
AudioContexts are limited OS resources (~6-8 per origin) and accumulate
until the Electron renderer hits the browser limit. Reuse a single
module-level instance and resume it if suspended by autoplay policy.

Closes #46
@johnkozaris johnkozaris requested a review from AlexPeppas April 2, 2026 13:27
@AlexPeppas AlexPeppas merged commit 1c76873 into master Apr 4, 2026
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.

AudioContext leak: new instance created on every bell sound

2 participants