Repository navigation
fix(j1939tp): order a cancelled CM abort before the next RTS - #454
Conversation
PR SummaryMedium Risk Overview Previously, cancelling in that state could release the destination immediately and send Connection Abort on a separate pool work item, so the next send’s RTS could reach the bus service before the cancelled session’s Abort (#356). All cancelled CM sends now keep the destination reserved via README documents this behavior. A regression test covers cancel after CTS(0) with Abort held in Reviewed by Cursor Bugbot for commit 8983ade. Bugbot is set up for automated code reviews on this repo. Configure here. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
What does this change?
Cancelling a CM send after its RTS was confirmed or answered immediately released the destination. The queued successor's RTS could therefore reach the bus service before the cancelled send's Connection Abort, because each control frame is dispatched on its own pool work item.
Every cancelled CM send now keeps the destination reserved until its Abort has crossed the service hand-off. An unsettled RTS still delays its Abort; an already settled RTS dispatches the Abort immediately through the same guarded path. The caller's cancellation completes without waiting for that hand-off. No public API change.
Closes #356. Its other actionable findings were resolved by #390, #414 and #418; the remaining SAE source-address questions are tracked separately in #422 and remain open. Refs #362 for the test helper's removal of a wall-clock hold limit.
Type of change
feat— new behaviour (minor release)fix/perf— bug or performance fix (patch release)docs/test/refactor/chore/ci— no releaseChecklist
-p:CI=true, test (net10.0),dotnet format --verify-no-changes, and pack +eng/verify-packages.pyall pass locallyValidation
A_Cm_Send_Cancelled_After_The_Peer_Answered_Hands_Off_Its_Abort_Before_The_Next_Rtsuses CTS(0) and an observed virtual T4 arm to establish that the RTS was answered, then holds the Abort inside the service hand-off. The next send must remain queued until that hold is released. The hold has no wall-clock expiry and is released infinally/service disposal..github/rulesets/main.json; production and test sources are identical. All 50 verification-script tests pass on the rebased tree.