Skip to content

Add free CreatePublisher/CreateSubscriber convenience functions#59

Open
dallison wants to merge 4 commits intomainfrom
static_functions
Open

Add free CreatePublisher/CreateSubscriber convenience functions#59
dallison wants to merge 4 commits intomainfrom
static_functions

Conversation

@dallison
Copy link
Copy Markdown
Owner

@dallison dallison commented Apr 5, 2026

Add inline free functions in the subspace namespace that combine client creation with publisher/subscriber creation in a single call. The returned Publisher/Subscriber already holds a shared_ptr to the ClientImpl so the client lifetime is managed automatically.

Includes positive and negative tests for both functions.

Made-with: Cursor

dallison added 4 commits April 5, 2026 13:55
Add inline free functions in the subspace namespace that combine client
creation with publisher/subscriber creation in a single call. The
returned Publisher/Subscriber already holds a shared_ptr to the
ClientImpl so the client lifetime is managed automatically.

Includes positive and negative tests for both functions.

Made-with: Cursor
SlotSize() on a freshly created subscriber with its own client may
return 0 before any messages are read. Replace the assertion with
a publish-and-read round-trip that properly validates the subscriber.

Made-with: Cursor
The test thread was accessing Shadow::channels_ via GetChannels() while
the shadow coroutine thread concurrently mutated it in HandleEvent().
Abseil debug mode (lts_20250814) detects this as reentrant container
access during emplace and aborts.

Fix by adding a mutex that protects channels_, session_id_, and scb_fd_.
Replace GetChannels() with a WithChannels(callback) template that holds
the lock for the duration of the callback. Update all test call sites.

Made-with: Cursor
The trailing return type decltype(f(channels_)) cannot resolve the
private member in that context. Use plain auto deduction instead.

Made-with: Cursor
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