已合并
fix(driver): 修复注册失败清理并补齐插件测试部署 #416
liuxingsen创建于 9月24日
fix(driver): 修复注册失败清理并补齐插件测试部署 #416
已合并
liuxingsen创建于 9月24日
liuxingsen成员
9月24日

当前PR是否有AI参与:

[x ] 否
[] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :

PR功能描述 / 为什么需要这个合入:

动态库打开后注册失败时,原实现正常返回并保留句柄;重复加载还会覆盖旧句柄。修复后,注册失败清理资源并向调用方报错,串行重复加载保留原句柄并拒绝操作。

CI 的 temp/bin/devmon_test 会运行两条真实插件异常用例,但原测试插件只构建、未安装,导致缺夹具失败。本次补齐构建和安装入口,并整改同次 CI 报告的 13 个文件头。

修改方案:

  • 先复制插件错误文本并结束异常对象生命周期,再清空设备、dlclose 和抛出框架异常;加载前拒绝已有句柄。
  • 两个固定异常插件分别抛出整数和插件定义异常,去掉进程环境变量切换行为;随测试程序安装到 bindir,仅在启用测试时构建和安装。
  • common_test、devmon_test、hwdiscovery_test 均声明插件依赖及构建目录;已安装程序默认从自身目录查找。循环测试脚本同步传递路径。用例检查夹具存在、确切错误文本、失败记录与卸载状态。
  • 接口明确同一 device_driver 实例由调用者串行访问;工厂为候选加载创建独立实例后在缓存锁内发布。纠正 unload 普通指针赋值能保证并发安全的错误注释。
  • 13 个文件头保留原版权、年份、文件说明及脚本入口,仅补齐或修正许可文本。测试说明集中在既有 tests/README.md。

验证方案:

本地构建后运行配置内完整 Meson 套件,再执行真实 meson install,取消插件目录变量,从安装布局运行驱动专项回归;移走夹具验证用例确实检出缺包,恢复后执行随机顺序重复测试。使用 CI 原版文件头检查器及仓库 pre-commit 检查。推送后单独核对当前 SHA 的远端流水线。

测试建议:

在标准 CI/Bingo 依赖环境复跑完整 UT;后续补充完整 unidev 运行、ASAN 和目标板验证。同一实例并发 load/unload 不在接口支持范围内,不能将串行守卫解释为线程安全。

自验证报告:

2026-10-13,本次实际验证:

  • GCC 9 原生 Meson 构建通过,复用本机已有 libmcpp/component_drivers 依赖;3 个已配置套件均通过:调度 59 项、common_test 415 项、devmon_test 1024 项通过,另有 14 项 CSR 引用对象用例按现有条件跳过,0 失败。
  • 构建入口 common_test、devmon_test 的 DeviceDriverTest 各 17/17;实际安装后取消 DEVMON_TEST_DRIVER_DIR,使用安装后的项目库,两个程序各 17 项随机顺序重复 10 轮均通过。移走已安装插件时,两条目标用例均因缺文件失败,恢复后通过。
  • unidev=true 完成配置,三个引用入口的插件目录和两个依赖均已核实;未编译/运行完整 unidev 套件。循环脚本实际参数解析、空 LD_LIBRARY_PATH 字段及解析失败回退验证通过。
  • 远端 run #91 对应当前提交 c93b0d1a286e328ae86afad0cda9470c31b1f171,2026-10-13 23:07 完成:pre-commit、PR 描述、防投毒、开源合规、编译构建、UT、头文件、AI Review 共 8 项启用检查全部 SUCCESS。UT 日志确认两个插件已安装到 Conan 测试包 bin,实际入口仍为 temp/bin/devmon_test,并报告 UT测试通过。
  • 当前社区 header_check.py 全仓通过,13 个目标文件除头部外正文逐字节未变;pre-commit、clang-format 22、bash -n、git diff --check 和提交消息检查通过。独立复核发现的两个入口遗漏已整改并复核。
  • 本机 Bingo 缺少 test 子命令,本地结果不冒充完整 Bingo/CI 通过;本轮未重跑 ASAN。tests/main.cpp 使用 std::quick_exit,不能宣称完成 LSAN 正常退出扫描。历史 57e786db 的测试结果不计入本轮。

该PR关联的issue

fixes #144

希望检视人员了解:

在主线 9eea32c 上整理为两个提交:功能及测试修复、文件头整改。原提交已留存备份,保持同一个 PR。三个既有检视意见已在整改推送并核实后标记解决。远端 run #91 已全部通过。保留两个提交,stat/needs-squash 按社区流程由评审设置扁平化合并;unresolved-reviews 是尚未刷新的汇总标签,实际三条意见均已 resolved=true。不以旧 ai-compliance-successful 标签代替复检。未调用可能自动合入的 /check-pr。本次不执行合入。

likedislike
Pull Request已成功合入, 合并人@openUBMC-robot
(感谢 liuxingsen 的贡献)
Lliuxingsen成员
9月24日 创建了 pull request,commit 1794adf6
openUBMC-robotopenUBMC-robot成员
9月24日 添加了label:sig/sig-component-drivers
openUBMC-robot
openUBMC-robot成员
9月24日 评论:

欢迎来到 openUBMC 社区

Hey @xiaoxinglxs , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。

联系指引

有疑问可以联系 SIG: sig-component-drivers ,
维护者是: @dongyushan, @net_swift_wangchen, @sam_h1973, @u012924942, @weixin_37569011, @xiaoxinglxs ,
优秀贡献者是: @WeliveWelove, @chenshengfan, @leessential, @zjp99 .

likedislike
openUBMC-robotopenUBMC-robot成员
9月24日 添加了label:ai-co-authored
openUBMC-robotopenUBMC-robot成员
9月24日 添加了label:openUBMC-cla/yes
此处折叠了72条消息 查看更多
lishengxiao成员
22 天前 评论:

/lgtm
/approve
/check-pr

likedislike
openUBMC-robotopenUBMC-robot成员
22 天前 添加了label:approvedlgtm
openUBMC-robotopenUBMC-robot成员
22 天前 删除了label:unresolved-reviews
openUBMC-robot
openUBMC-robot成员
22 天前 评论:

  • 标签 lgtm, approved 已被添加. 这意味着 leessential 已经检查过代码了. 👋
Tips
  • 如果PR还没有被合入, 请评论 /check-pr 进行检查. 😄
likedislike
openUBMC-robotopenUBMC-robot成员
22 天前 合入了pull request,合并节点 SHA:82f7d573ddb39914ad1491fd5788e0561b6a5e79