Strand: thread continuation through queue, drop strand_op wrapper (#149)#282
Conversation
…palliance#149) The strand pending queue previously wrapped each posted handle in a heap-allocated `strand_op` coroutine solely for its `next` pointer. The user-facing `continuation` already carries an intrusive `next`, so link continuations directly through the queue and delete the wrapper machinery (`strand_op`, `frame_prefix`, `make_strand_op`, `free_list_`, the prefix-allocator new/delete). The detail-layer `strand_service::dispatch`/`post` signatures change from `coroutine_handle<>` to `continuation&`. Public `strand::post`/ `dispatch` signatures are unchanged. Tightens the implementation to the documented contract: a continuation must outlive its time in any executor queue. Tests that posted stack-local continuations and let them die before dispatch are updated to hoist storage out to a vector.
|
An automated preview of the documentation is available at https://282.capy.prtest3.cppalliance.org/index.html If more commits are pushed to the pull request, the docs will rebuild at the same URL. 2026-05-15 20:06:51 UTC |
|
GCOVR code coverage report https://282.capy.prtest3.cppalliance.org/gcovr/index.html Build time: 2026-05-15 20:21:55 UTC |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #282 +/- ##
===========================================
+ Coverage 92.01% 92.27% +0.25%
===========================================
Files 164 164
Lines 8944 8862 -82
===========================================
- Hits 8230 8177 -53
+ Misses 714 685 -29
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 2 files with indirect coverage changes Continue to review full report in Codecov by Sentry.
🚀 New features to boost your workflow:
|
The strand pending queue previously wrapped each posted handle in a heap-allocated
strand_opcoroutine solely for itsnextpointer. The user-facingcontinuationalready carries an intrusivenext, so link continuations directly through the queue and delete the wrapper machinery (strand_op,frame_prefix,make_strand_op,free_list_, the prefix-allocator new/delete).The detail-layer
strand_service::dispatch/postsignatures change fromcoroutine_handle<>tocontinuation&. Publicstrand::post/dispatchsignatures are unchanged.Tightens the implementation to the documented contract: a continuation must outlive its time in any executor queue. Tests that posted stack-local continuations and let them die before dispatch are updated to hoist storage out to a vector.
Resolves #149