已合并
fix: 修复DFlowInitialize失败不回滚和DFlowFinalize中aclFinalize顺序错误 #4473
fix: 修复DFlowInitialize失败不回滚和DFlowFinalize中aclFinalize顺序错误 #4473
已合并
lining23666创建于 4 天前
lining23666成员
4 天前

Pull Request

描述

修复 DFlowInitialize 和 DFlowFinalize 中存在的 4 个问题:

  1. 初始化失败无回滚,资源泄漏:DFlowInitialize 中间步骤失败时(如 PNE SO 加载失败),已初始化的 ACL、SessionManager 不会被清理。用户调 DFlowFinalize 时因 g_dflow_ge_initialized 仍为 false 直接返回,资源泄漏。
  2. aclFinalize 顺序错误(use-after-free):DFlowFinalize 中 aclFinalize 在 SessionManager Finalize 之前执行,而 SessionManager Finalize 会触发 GeSession 析构调用 DestroyRtContexts,此时 ACL 已释放,存在 use-after-free 风险。
  3. 并发初始化竞态:DFlowInitialize 无锁保护,并发调用会覆盖 g_dflow_session_manager 指针导致泄漏。
  4. 重复 Finalize 不清理:DFlowFinalize 检查 g_dflow_ge_initialized,初始化失败后该标志为 false,导致 Finalize 跳过清理。

修复方案

  • 提取 DFlowFinalizeImpl() 到匿名命名空间,包含完整清理逻辑(ACL finalize 在末尾)
  • DFlowInitialize 入口加 g_dflow_ge_release_mutex 锁,失败时调 DFlowFinalizeImpl() 自动回滚
  • DFlowFinalize 去掉 g_dflow_ge_initialized 检查,改为无条件幂等清理
  • aclFinalize 移到 DFlowFinalizeImpl 末尾,在 SessionManager/PNE 清理之后

变更类型

关联的Issue

如何测试

  1. 编译 dflow UT target ut_libge_helper_utest
  2. 运行 DFlowInitialize 相关测试用例

核对清单

其他信息

测试结果:10 个相关 UT 全部通过,包括验证回滚路径的 DFlowInitialize_pne_init_failed、验证 ACL 重复初始化兼容的 DFlowInitialize_acl_repeat_init、验证 ACL 失败的 DFlowInitialize_acl_init_failed。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 lining23666 的贡献)
Llining23666成员
4 天前 创建了 pull request,commit 38873ffc
atomgit-bot
atomgit-bot
4 天前 评论:

变更摘要

本 PR 修复 dflow/runner/session/dflow_api.ccDFlowInitializeDFlowFinalize 的资源管理与生命周期问题。核心改动是将完整清理逻辑提取到匿名命名空间中的 DFlowFinalizeImpl() 函数(包含 SessionManager Finalize、malloc_trimge::DFlowFinalizeInner()aclFinalize() 及标志位重置),使初始化失败时可复用同一清理路径实现自动回滚;同时在 DFlowInitialize 入口加锁解决并发竞态,并移除 DFlowFinalize 中对 g_dflow_ge_initialized 的检查,改为无条件幂等清理。

主要改动

  • 提取 DFlowFinalizeImpl() 统一清理逻辑: 将原先分散在 DFlowFinalize 中的 SessionManager Finalize、malloc_trim(0)DFlowFinalizeInner()aclFinalize()acl_initialized/acl_owned_by_dflow 标志重置集中到匿名命名空间的 DFlowFinalizeImpl(),供初始化失败回滚与正常 Finalize 共用。
  • DFlowInitialize 失败自动回滚: 入口新增 std::lock_guard<std::mutex> lock(g_dflow_ge_release_mutex) 防止并发覆盖 g_dflow_session_manager 导致泄漏;当 SessionManager 创建失败或 ge::DFlowInitializeInner(options) 返回非 SUCCESS 时调用 DFlowFinalizeImpl() 清理已初始化的 ACL、SessionManager 等资源,避免资源泄漏。
  • DFlowFinalize 改为无条件幂等清理: 删除对 g_dflow_ge_initialized 的检查(该标志在初始化失败后为 false 会跳过清理),直接加锁调用 DFlowFinalizeImpl(),保证重复或初始化失败后的 Finalize 也能正确执行清理。
  • 修正 aclFinalize 调用顺序: 将 aclFinalize() 从原先 DFlowFinalize 开头的提前执行,移动到 DFlowFinalizeImpl() 末尾、在 SessionManager/PNE 清理之后执行,避免 SessionManager Finalize 触发 GeSession 析构调用 DestroyRtContexts 时 ACL 已被释放导致的 use-after-free。
likedislike
atomgit-bot
atomgit-bot
4 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
4 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/ge 张德鹏, xchu42, stevenaw0 (3/2) 张德鹏 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

lining23666, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
CANN-robotCANN-robot成员
4 天前 将yangyongqiang0606,kobemini,ClarkXie,tangqunzhang,xchu42,hugo111,fu-jun2,depeng1994,wqtshg_wt,peiyang,shengnan666,zhangfan_hanq,zhanj,zhujingjing,Mexyy,wangxiaotian995,stevenaw0,yuht9设为评审人
此处折叠了5条事件消息 查看更多
CANN-robotCANN-robot成员
4 天前 添加了label:cann-cla/yes
lining23666成员
4 天前 评论:

compile

likedislike
Llining23666成员
4 天前 update merge request[project id: 8824148, iid: 4473, commit_id: 1514b8460f6c17869d7f4df75032b327ae4ca140] virtual merging success
CANN-robotCANN-robot成员
4 天前 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
4 天前 评论:

流水线任务触发成功
任务链接 [09bb1793ae7546729262abb01e2655be][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_ARM_compiler ✅ SUCCESS >>>>> >>>>>
Compile_ARM_executor ✅ SUCCESS >>>>> >>>>>
Compile_ARM_dflow ✅ SUCCESS >>>>> >>>>>
API_Check ✅ SUCCESS >>>>>
PreSmoke_A900_npupool ✅ SUCCESS >>>>>

[2026-08-20 19:13:02]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
4 天前 评论:

流水线任务触发成功
任务链接 [6a183642c85a4fb4bd0035f157d69910][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_X86_compiler ✅ SUCCESS >>>>> >>>>>
Compile_X86_executor ✅ SUCCESS >>>>> >>>>>
Compile_X86_dflow ✅ SUCCESS >>>>> >>>>>
UT_Test_dflow ✅ SUCCESS
UT_Test_ge_common ✅ SUCCESS
UT_Test_parser ✅ SUCCESS
UT_Test_python ✅ SUCCESS >>>>>
UT_Test_rt ✅ SUCCESS
UT_Test_acl ✅ SUCCESS
UT_Test_autofuse ✅ SUCCESS
UT_Test_executor ✅ SUCCESS
UT_Test_autofuse_ascendc_api ✅ SUCCESS
ST_Test_dflow ✅ SUCCESS
ST_Test_ge_common ✅ SUCCESS
ST_Test_parser ✅ SUCCESS
ST_Test_python ✅ SUCCESS >>>>>
ST_Test_rt ✅ SUCCESS
ST_Test_autofuse ✅ SUCCESS
ST_Test_executor ✅ SUCCESS
ST_Test_hetero ✅ SUCCESS
ST_Test_autofuse_ascendc_api ✅ SUCCESS
ST_Test_autofuse_e2e ✅ SUCCESS
UT_Test_fe ✅ SUCCESS
UT_Test_tefusion ✅ SUCCESS
ST_Test_fe ✅ SUCCESS
ST_Test_tefusion ✅ SUCCESS
ST_Test_ge_common_atc ✅ SUCCESS
UT_Test_Report_graphengine ✅ SUCCESS >>>>>
UT_Test_Report_ge_executor_c ✅ SUCCESS >>>>>
UT_Test_Report_ge_autofuse ✅ SUCCESS >>>>>
ST_Test_Report_graphengine ✅ SUCCESS >>>>>
ST_Test_Report_ge_executor_c ✅ SUCCESS >>>>>
ST_Test_Report_ge_autofuse ✅ SUCCESS >>>>>
UT_Test_Report_fe ✅ SUCCESS >>>>>
ST_Test_Report_fe ✅ SUCCESS >>>>>

[2026-08-20 19:29:11]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
4 天前 评论:

流水线任务触发成功
任务链接 [912debde3d244db3a6a595361dbfb43c][流水线指导]

任务名称状态日志下载链接
codecheck_Pr ✅ SUCCESS
antipoison ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
codecheck_dt ✅ SUCCESS >>>>>
codecheck_precommit ✅ SUCCESS >>>>>
StaticCheck_codespell ✅ SUCCESS
StaticCheck_link_validity ✅ SUCCESS
StaticCheck_resource_existence ✅ SUCCESS
StaticCheck_tag_closed ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS

[2026-08-20 19:10:44]    CI执行结束

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:api-check-pass
CANN-robotCANN-robot成员
4 天前 删除了label:api-check-pass
CANN-robotCANN-robot成员
4 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
4 天前 添加了label:ci-pipeline-passed
xchu42
xchu42成员
3 天前 评论:

/lgtm

likedislike
黄桂军
黄桂军成员
3 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
3 天前 添加了label:lgtm
张德鹏成员
3 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
3 天前 添加了label:approved
CANN-robotCANN-robot成员
3 天前 合入了pull request