Skip to content

fix: end client before removeAllListeners in stop() to prevent subscribe() hang#175

Merged
kibae merged 1 commit into
mainfrom
fix/stop-subscribe-hang
Apr 21, 2026
Merged

fix: end client before removeAllListeners in stop() to prevent subscribe() hang#175
kibae merged 1 commit into
mainfrom
fix/stop-subscribe-hang

Conversation

@kibae
Copy link
Copy Markdown
Owner

@kibae kibae commented Apr 21, 2026

Fixes #172

Problem

When stop() was called, removeAllListeners() stripped the end/error handlers from the pg client before client.end() was called. This caused the subscribe() promise to never resolve or reject — hanging the caller indefinitely.

Fix

Call client.end() first, then remove listeners. This ensures the pg query promise inside subscribe() is properly notified when the connection closes.

// Before (broken)
this._client?.removeAllListeners(); // removes end handler
await this._client?.end();          // nobody listening → hang

// After (fixed)
await this._client?.end();          // closes connection, promise resolves
this._client?.removeAllListeners(); // clean up after

…ibe() hang

When stop() was called, removeAllListeners() was removing the end/error
handlers from the pg client before client.end() was called. This caused
the subscribe() promise (which awaits plugin.start()) to never resolve
or reject, hanging the caller indefinitely.

Fix: call client.end() first, then remove listeners.

Fixes #172
@kibae kibae merged commit fe8c355 into main Apr 21, 2026
50 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.

stop() causes subscribe() promise to never resolve

1 participant