Skip to content

Make multi-stream disconnect callbacks mutually exclusive#12

Merged
andriytyurnikov merged 1 commit intodevelopfrom
feature/server-disconnect-symmetry
Apr 27, 2026
Merged

Make multi-stream disconnect callbacks mutually exclusive#12
andriytyurnikov merged 1 commit intodevelopfrom
feature/server-disconnect-symmetry

Conversation

@andriytyurnikov
Copy link
Copy Markdown
Member

Reopens previously-merged #6 after develop reset. See #6 for full description.

stream_one's lifecycle contract (handling_sync_errors) fires exactly
one of on_server_disconnect / on_client_disconnect / on_error per
stream — never a combination. stream_many violated this: its
ensure block always fired on_server_disconnect, even when an error
or client disconnect had already triggered the matching callback.

Consumers writing observability/cleanup logic against these
callbacks would see different behavior depending on whether they
called .stream once or many times — a subtle source of bugs.

Fix: track a completed_normally flag in stream_many's control
thread, set it false when handle_streaming_error runs, and only
fire on_server_disconnect in the ensure block when the flag is
still true.

2 new shared examples (run for both ThreadExecutor and
AsyncExecutor):
- streamer raises → on_error fires, on_server_disconnect doesn't
- client disconnects → on_client_disconnect fires, on_server_disconnect doesn't
@andriytyurnikov andriytyurnikov merged commit 62eb28d into develop Apr 27, 2026
2 checks passed
@andriytyurnikov andriytyurnikov deleted the feature/server-disconnect-symmetry branch April 27, 2026 11:55
@andriytyurnikov andriytyurnikov restored the feature/server-disconnect-symmetry branch April 27, 2026 12:46
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