Skip to content

fix(shared-memory): copy envelopes at transport handoff#3333

Merged
jeremydmiller merged 1 commit into
JasperFx:mainfrom
Steve-XYZ:codex/shared-memory-envelope-handoff
Jul 8, 2026
Merged

fix(shared-memory): copy envelopes at transport handoff#3333
jeremydmiller merged 1 commit into
JasperFx:mainfrom
Steve-XYZ:codex/shared-memory-envelope-handoff

Conversation

@Steve-XYZ

Copy link
Copy Markdown
Contributor

Summary

Fixes #3015 by giving Shared Memory receivers a new Envelope instance at the transport handoff boundary instead of retaining the sender's pooled envelope.
This follows the intended ownership model: the sender may recycle its pooled envelope after SendAsync() completes, while each asynchronous receiver owns an independent envelope wrapper.

Changes

  • add a Shared Memory-local envelope copy helper;
  • create a distinct envelope copy per topic subscription;
  • copy direct subscription sends before posting to the receiver;
  • preserve message, transport metadata, headers, context fields, and custom metric tags;
  • intentionally exclude sender, pool, persistence, batching, and receiver runtime lifecycle state;
  • add a deterministic regression test proving receiver copies remain valid after the original sender envelope is recycled.

Validation

  • deterministic regression test: 10/10 independent runs passed;
  • focused CoreTests Shared Memory coverage: 14 passed;
  • scheduled/context Shared Memory regression: passed;
  • CoreTests net10.0: 1861 passed, 2 skipped;
  • focused request/reply and correlation tests passed when run independently.
    The combined Shared Memory compliance selection has pre-existing cross-test interference in can_send_from_one_node_to_another_by_publishing_rule; both inline and buffered cases pass in isolation.

@jeremydmiller

Copy link
Copy Markdown
Member

@Steve-XYZ Thanks for taking that on! Frankly, that was probably never something I was going to get around to

@jeremydmiller
jeremydmiller merged commit f9507cb into JasperFx:main Jul 8, 2026
25 of 26 checks passed
This was referenced Jul 9, 2026
This was referenced Jul 15, 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.

Problems w/ the shared memory transport after introducing envelope pooling

2 participants