fix(can): Resolve potential race condition in message transmission #10896
+6
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
当前的 CAN 驱动在发送消息时,发送状态标志位
sndchange是在底层硬件发送函数can->ops->sendmsg被调用之后才设置的。这在发送超时的场景下可能会引发竞态问题,导致驱动对发送状态的判断和处理出现错误,影响通信的稳定性。你的解决方案是什么 (what is your solution)
为了解决这个潜在的竞态问题,本 PR 对代码进行了调整,将
sndchange标志位的设置操作移动到了调用can->ops->sendmsg函数之前。这样的修改可以确保:一旦驱动决定使用某个邮箱进行发送,就会立即将其标记为“发送中”状态。这使得驱动的状态管理更加严谨和健壮,能够正确处理发送超时等异常情况。
此外,本次提交还在头文件
dev_can.h中添加了RT_CAN_MODE_MASK和RT_CAN_MODE_LIST宏定义,为后续的 CAN 过滤器模式配置做准备。请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up