Skip to content

Fix concurrent STM32 package updates and builds - #37

Merged
Rbb666 merged 1 commit into
RT-Thread:mainfrom
CYFS3:fix/stm32-package-update-race
Oct 23, 2026
Merged

Rbb666 merged 1 commit into
RT-Thread:mainfrom
CYFS3:fix/stm32-package-update-race

Conversation

@CYFS3

@CYFS3 CYFS3 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

STM32 软件包测试会并行运行多个版本。虽然每个任务有独立的 BSP 副本,它们仍共用 bsp/stm32/libraries 下的 HAL/CMSIS 驱动目录。原来的 sem_stm32 只保护编译,依赖更新没有加锁,因此一个任务可能在另一个任务克隆依赖尚未完成时,对同一目录执行 git pull。

RT-Thread/rt-thread#11870 的测试就出现了这一问题:hello:v1.0.0 克隆 stm32h7_cmsis_driver-latest,而 hello:latest 更新该共享目录时,Git 报出未跟踪文件将被覆盖并中止。失败发生在依赖更新阶段,随后被测试框架统一报告为 compile failure。见失败日志。

因此将锁移到 __build(),在配置生成完成后获取,连续保护软件包更新和编译两个阶段。两者必须使用同一个临界区:如果只锁住更新过程,另一个任务仍可能在编译期间修改当前任务正在使用的依赖文件。这样修改后,STM32 任务会完成依赖更新和编译后再交出锁,其他 BSP 仍可并行执行。

同时移除 __build_scons() 内原有的加锁,避免同一线程重复获取信号量导致死锁,并通过 try/finally 保证异常时释放锁。

@Rbb666
Rbb666 merged commit 07c8a62 into RT-Thread:main Oct 23, 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.

2 participants