已合并
sync render pipeline code: hold pipeline via weak_ptr in RSRenderPipelineAgent #30688
sync render pipeline code: hold pipeline via weak_ptr in RSRenderPipelineAgent #30688
已合并
LyBbq创建于 6月12日
LyBbq成员
6月12日

Description:

问题背景:

RSRenderPipelineAgent 以 std::shared_ptr<RSRenderPipeline>& 引用成员持有 pipeline,各异步回调 lambda 按引用捕获该成员,agent 与 pipeline 生命周期强耦合,pipeline 先于 agent 释放时存在悬垂引用风险(内部代码同步至社区仓)。

修复方案:

  1. 成员改为 std::weak_ptr<RSRenderPipeline>,构造函数改为按值传入 shared_ptr,agent 不再延长 pipeline 生命周期
  2. 各接口先 lock() 取局部 pipeline,为空时打 RS_LOGW 日志并提前返回
  3. 异步回调 lambda 改为值捕获 renderPipeline = pipeline(shared_ptr),回调执行期间自行保活,不再捕获成员引用
  4. 相关单测同步适配(rs_render_pipeline_agent.cpp/.h)。

Issue number:https://gitcode.com/openharmony/graphic_graphic_2d/issues/24402

Test & Result:

  • 门禁通过:编译、静态检查、冒烟测试均成功,已合入 master
  • pipeline 释放后 agent 接口调用不再访问悬垂引用,回调执行期间对象存活

CodeCheck:

类型 自检项 自检结果
多线程 在类的成员变量中定义了vector/map/list等容器类型,且在多个成员函数中有操作时,需要加锁保护 自检结果:
定义全局变量,在多个函数中都有操作时,需要加锁保护 自检结果:
内存操作 调用外部接口时,确认是否对返回值做了判空判断,尤其外部接口返回了nullptr的情况,避免进程崩溃 自检结果:
内存操作优先使用安全函数,并检查其返回值 自检结果:
注意每个异常退出流程,是否都已经将资源释放(推荐使用RAII) 自检结果:
隐式内存分配场景:realpath、ReadParcelable序列化、cJSON相关函数时等,需主动释放或使用智能指针 自检结果:
外部输入 所有外部输入均不可信,需判断外部输入是否直接作为内存分配的大小,数组下标、循环条件、SQL查询等 自检结果:
注意外部字符串数据有无尾0 自检结果:
外部输入的路径不可信,需使用realpath做标准化处理,并判断路径的合法性 自检结果:
敏感信息 注意日志中打印敏感信息需匿名化 自检结果:
数学运算 代码中是否混合了加减乘除等运算,需检查是否可能导致整数溢出或符号翻转 自检结果:
初始化 类成员、局部变量使用前需初始化 自检结果:
权限管理 作为系统服务对外提供了接口(或RSCmd),是否做了权限保护和校验,只允许申请了权限的应用访问 自检结果:

L0新增用例自检结果

likedislike
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 LyBbq 的贡献)
LLyBbq成员
6月12日 关联了issue:[Bug]: syncRenderPipeline
LLyBbq成员
6月12日 强制推送  38 个提交:7b78f1bb-37 commits from branch master,f85f8cdf-code sync renderPipeline
openharmony_ciopenharmony_ci成员
6月12日 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
6月12日 评论:

感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。


Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
openharmony_ciopenharmony_ci成员
6月12日 添加了label:dco检查成功
LyBbq成员
6月12日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
6月12日 评论:

首次触发
门禁构建开始,包含静态检查、代码编译和测试【dayu200测试, arm64_virt编译, dayu600编译, ohos-mini编译, ohos_mini_tdd编译, ohos-host编译, master_inner_build编译, dayu200编译, mac-sdk编译, dayu200_tdd编译, ohos-sdk编译, part_compile编译, dayu200-codearts编译, hap_build编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a2bbf3c64650f998bfb9c0c/runlist

likedislike
openharmony_ciopenharmony_ci成员
6月12日 添加了label:静态检查失败
openharmony_ci
openharmony_ci成员
6月12日 评论:

代码门禁未通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a2bbf3c64650f998bfb9c0c/runlist

静态检查:

# check type result report
1 codeCheck noPass >>>

编译测试:
# Device build result package
1 ohos-sdk pending NA
2 dayu200 pending NA
3 dayu200_tdd pending NA
4 hap_build pending NA
5 part_compile pending NA
6 master_inner_build pending NA
7 dayu200-codearts pending NA
8 ohos-host pending NA
9 mac-sdk pending NA
10 ohos-mini pending NA
11 arm64_virt pending NA
12 ohos_mini_tdd pending NA
13 dayu600 pending NA

likedislike
LyBbq成员
6月12日 评论:

start build

likedislike
openharmony_ciopenharmony_ci成员
6月12日 删除了label:静态检查失败
openharmony_ci
openharmony_ci成员
6月12日 评论:

本地或库上代码有更新,全量重新构建,重置所有关联PR的验证状态
门禁构建开始,包含静态检查、代码编译和测试【part_compile编译, dayu600编译, ohos-host编译, ohos_mini_tdd编译, ohos-sdk编译, master_inner_build编译, arm64_virt编译, mac-sdk编译, dayu200测试, dayu200-codearts编译, dayu200_tdd编译, hap_build编译, ohos-mini编译, dayu200编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a2bc37c64650f998b00f717/runlist

likedislike
openharmony_ciopenharmony_ci成员
6月12日 添加了label:编译失败
LLyBbq成员
6月12日 推送  1 个提交:6c27dad6-fix
openharmony_ciopenharmony_ci成员
6月12日 删除了label:编译失败
openharmony_ci
openharmony_ci成员
6月12日 评论:

代码有更新,重置PR验证状态

likedislike
openharmony_ci
openharmony_ci成员
6月12日 评论:

监测到PR: https://gitcode.com/openharmony/graphic_graphic_2d/merge_requests/30688 代码有更新,当前正在执行的门禁任务已自动中止,如有需要,可重新触发

likedislike
openharmony_ci
openharmony_ci成员
6月12日 评论:

感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。


Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
LyBbq成员
6月12日 评论:

start build

likedislike
openharmony_ci
openharmony_ci成员
6月12日 评论:

本地或库上代码有更新,全量重新构建,重置所有关联PR的验证状态
门禁构建开始,包含静态检查、代码编译和测试【mac-sdk编译, arm64_virt编译, part_compile编译, dayu200测试, ohos-sdk编译, hap_build编译, ohos-host编译, dayu200_tdd编译, ohos-mini编译, ohos_mini_tdd编译, dayu200编译, master_inner_build编译, dayu200-codearts编译, dayu600编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a2bd3d764650f998b112bb1/runlist

likedislike
openharmony_ciopenharmony_ci成员
6月12日 添加了label:编译成功
openharmony_ciopenharmony_ci成员
6月12日 添加了label:静态检查成功
openharmony_ciopenharmony_ci成员
6月12日 添加了label:冒烟测试成功
openharmony_ciopenharmony_ci成员
6月12日 通过测试
openharmony_ci
openharmony_ci成员
6月12日 评论:

代码门禁通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a2bd3d764650f998b112bb1/runlist

静态检查:

# check type result report
1 codeCheck pass >>>

编译测试:
# Device build result test result package
1 ohos-sdk success NA >>>
2 dayu200 success success >>>
3 dayu200_tdd success NA >>>
4 hap_build success NA >>>
5 part_compile success(IGNORE) NA >>>
6 master_inner_build failed(IGNORE)(联合门禁失败) NA >>>
7 dayu200-codearts success(IGNORE) NA >>>
8 ohos-host success NA >>>
9 mac-sdk success NA >>>
10 ohos-mini success NA >>>
11 arm64_virt success NA >>>
12 ohos_mini_tdd success NA >>>
13 dayu600 failed(IGNORE)(compile failed) NA >>>

likedislike
openharmony_ciopenharmony_ci成员
6月12日 删除了label:waiting_on_author
openharmony_ciopenharmony_ci成员
6月12日 添加了label:waiting_for_review
openharmony_ci
openharmony_ci成员
6月12日 评论:

您好,Committer @liumingxiang1 @comicchang @aslklw @wang-luyu4 @lijj01 @stonesxd @xuyuqiong @kroswang @djnash @gmiao522 @wh_qwe @liuchao-huawei @BruceXu @liuchuan666 @gaoweihua ,请分配检视人员检视该PR,可以通过命令"assign [@someone_id]"分配检视人员,也可以直接评论"assign"分配给自己进行检视。


Hello, Committer @liumingxiang1 @comicchang @aslklw @wang-luyu4 @lijj01 @stonesxd @xuyuqiong @kroswang @djnash @gmiao522 @wh_qwe @liuchao-huawei @BruceXu @liuchuan666 @gaoweihua . Please assign someone to review the PR. You can assign a reviewer by using the command "assign [@someone_id]", or you can comment "assign" to review the PR by yourself.

likedislike
aslklwaslklw成员
6月15日 通过审查
openharmony_ci
openharmony_ci成员
6月15日 评论:

验证结果已超过12小时,之前验证结果无效,自动重新触发构建,请关注最新验证结果

likedislike
openharmony_ci
openharmony_ci成员
6月15日 评论:

start build

likedislike
openharmony_ciopenharmony_ci成员
6月15日 删除了label:编译成功
openharmony_ciopenharmony_ci成员
6月15日 删除了label:静态检查成功
openharmony_ciopenharmony_ci成员
6月15日 删除了label:冒烟测试成功
openharmony_ci
openharmony_ci成员
6月15日 评论:

本地或库上代码有更新,全量重新构建,重置所有关联PR的验证状态
门禁构建开始,包含静态检查、代码编译和测试【ohos_mini_tdd编译, dayu200编译, ohos-mini编译, dayu600_7885编译, ohos-sdk编译, part_compile编译, hap_build编译, arm64_virt编译, dayu200测试, dayu200_tdd编译, ohos-host编译, mac-sdk编译, master_inner_build编译】,预计在60分钟内完成,门禁结果会同步发送到注册邮箱。您可以通过如下链接跟踪门禁进展:http://dcp.openharmony.cn/workbench/cicd/detail/6a2f562864650f998be7bf9d/runlist

likedislike
openharmony_ciopenharmony_ci成员
6月15日 添加了label:编译成功
openharmony_ciopenharmony_ci成员
6月15日 添加了label:静态检查成功
openharmony_ciopenharmony_ci成员
6月15日 添加了label:冒烟测试成功
openharmony_ciopenharmony_ci成员
6月15日 通过测试
openharmony_ci
openharmony_ci成员
6月15日 评论:

代码门禁通过
您可以通过如下链接查看门禁报告:http://dcp.openharmony.cn/workbench/cicd/detail/6a2f562864650f998be7bf9d/runlist

静态检查:

# check type result report
1 codeCheck pass >>>

编译测试:
# Device build result test result package
1 ohos-sdk success NA >>>
2 dayu200 success success >>>
3 dayu200_tdd success NA >>>
4 hap_build success NA >>>
5 part_compile success(IGNORE) NA >>>
6 master_inner_build failed(IGNORE)(联合门禁失败) NA >>>
7 dayu600_7885 failed(IGNORE)(compile failed) NA >>>
8 ohos-host success NA >>>
9 mac-sdk success NA >>>
10 ohos-mini success NA >>>
11 arm64_virt success NA >>>
12 ohos_mini_tdd success NA >>>

likedislike
openharmony_ci
openharmony_ci成员
6月15日 评论:

您好,Committer @liumingxiang1 @comicchang @aslklw @wang-luyu4 @lijj01 @stonesxd @xuyuqiong @kroswang @djnash @gmiao522 @wh_qwe @liuchao-huawei @BruceXu @liuchuan666 @gaoweihua ,请分配检视人员检视该PR,可以通过命令"assign [@someone_id]"分配检视人员,也可以直接评论"assign"分配给自己进行检视。


Hello, Committer @liumingxiang1 @comicchang @aslklw @wang-luyu4 @lijj01 @stonesxd @xuyuqiong @kroswang @djnash @gmiao522 @wh_qwe @liuchao-huawei @BruceXu @liuchuan666 @gaoweihua . Please assign someone to review the PR. You can assign a reviewer by using the command "assign [@someone_id]", or you can comment "assign" to review the PR by yourself.

likedislike
openharmony_ciopenharmony_ci成员
6月15日 关闭了关联的issue
此处折叠了5条事件消息 查看更多
LLyBbq成员
8月31日 修改了pull request 的描述