首页»版块 › 智慧生活 › 笔记本 ›缺陷报告:HnTrustCircleService 线程泄漏导致进程死锁

缺陷报告:HnTrustCircleService 线程泄漏导致进程死锁

[复制帖子标题和链接]

3970

txxcat  LV9  发表于 6 天前 中国香港 来自:浏览器

缺陷报告:HnTrustCircleService 线程泄漏导致进程死锁,引发「设备发现失效」与「全局剪贴板锁死」
     最先发现复制粘贴失效,自行查找问题无果后通过WorkBuddy查找出问题。后来发现信任环失效,售后建议恢复系统,没同意,又用WorkBuddy查找出问题,今天再次发现粘贴复制失效,回顾原先的对话,发现和信任环失效的故障同源,于是让WorkBuddy生成以下报告,希望荣耀能早日修复这个BUG。

一、概要
HnTrustCircleService.exe(信任环服务)存在线程泄漏并最终死锁的缺陷。 死锁后进程仍然存活、任务管理器和电脑管家界面均显示「正常」,但内部已完全停止工作, 导致两组互不相关的外部症状:

  • 设备发现失效:电脑看不到手机/平板(手机端彼此可见),配对二维码始终刷不出来;
  • 全系统复制粘贴失效:该进程死锁时持有的全局剪贴板锁不归还,所有程序的复制粘贴被阻塞。


两种症状都是同一进程死锁的不同表现,取决于死锁时它正持有哪些资源。 用户侧完全无法自行判断原因,通常误以为是系统故障。


二、受影响环境[td]
项目值
机型HONOR DRA-XX(MagicBook Pro 16 HUNTER 2024)
CPUIntel Core Ultra 7 155H
操作系统Microsoft Windows 11 专业版,10.0.26300(Build 26300)
BIOS1.13(2024-11-29)
荣耀电脑管家20.0.0.60
信任环组件(TrustCircleVersion)20.0.0.81(SP1C233)
HnTrustCircleService.exe 文件版本1.0.0.1
荣耀超级工作台5.5.1.86(C233)
账号状态已登录(UserLoginFlag=1、RegCountry=CN)
注意:剪贴板故障发生时,本机从未与任何设备配对(PCIsAuthorState=0、 PairDeviceAuthor=0、SuperTerminalCanRun=0),多设备协同功能处于未启用状态, 该服务仍在监听并锁死剪贴板。


三、现象3.1 设备发现失效(2026-11-05)
  • 手机、平板在信任环内互相可见,唯独看不到这台电脑
  • 电脑端设备列表为空,无法发现任何设备
  • 配对二维码始终是空白,无法完成配对
  • 电脑管家界面无任何报错,服务状态显示「运行中」


3.2 剪贴板失效(2026-10-30)
  • 任意程序 Ctrl+C 无效果,Ctrl+V 粘贴出旧内容或空内容
  • 记事本、浏览器、微信、WPS、VS Code 全部同时失效
  • 重启 explorer.exe 无效;Windows 剪贴板服务 cbdhsvc 状态正常
  • 故障持续 2 小时 20 分钟不自行恢复


3.3 共同点
两种情况终止进程后均立即恢复,父进程 2 秒内拉起新实例,新实例状态健康。


四、关键证据4.1 死锁现场(2026-11-05 实测)[td]
指标死锁时正常参考值
线程数4856同机其他荣耀进程最高 342;本进程重启后 429~433
CPU 时间冻结在 2153.3 秒,采样期间零增长3 秒采样增量约 0.15~0.30 秒
内存37.9 MB164 MB(正常态)
网络连接仅 2 个本地回环,零外部连接云端 1 条 + 局域网若干
界面显示「服务正常运行」—
4.2 修复后对比(终止进程,父进程自动拉起)
新实例 2 秒内启动,线程数 4856 → 429,并立刻建立连接:

  • 云端:61.135.208.63:1884 — Established
  • 局域网设备:192.168.31.166:43447、192.168.31.137:36637 — Established


4.3 剪贴板锁死现场(2026-10-30 实测)[td]
指标故障时正常时
OpenClipboard(NULL) 采样30/30 全部失败,GetLastError()=5(ACCESS_DENIED)30/30 成功
GetOpenClipboardWindow()恒为同一 hwnd(66578)返回 0
持有窗口归属HnTrustCircleService.exe(PID 14432),class=NBVirtualWnd、title=HFWnd—
GetClipboardSequenceNumber()停滞在 11,写入后增量 0正常递增
持续时间2 小时 20 分钟,直到手动终止—
4.4 时间线锚点
  • local_device_status 最后成功组环:report_time: 2026-10-30-12,phone_count=1、pad_count=1,之后归零
  • 该文件与 tailscaled 启动同为 2026-11-01 01:47,实为开机时刻,非故障时刻
  • 从 11/01 开机到 11/05 失效,约 4 天累积到 4856 线程


4.5 已排除项[td]
怀疑方向排除依据
账号/云端绑定UserLoginFlag=1、RegCountry=CN;手机端可见彼此,说明云端侧正常
防火墙TrustCircleService 入站规则存在,程序路径正确
mDNS 5353Dnscache 与百度网盘/Steam 通过 SO_REUSEADDR 共享,属 Chromium 系正常行为
DNS / 网络连通性云端域名 tcis-drcn.security.hihonorcloud.com、account-drcn.platform.hihonorcloud.com 单独测试握手正常
蓝牙适配器状态正常
Tailscale 干扰hosts 中有 magic-v2/magicpad-13 的 MagicDNS 记录,但未抢占默认路由,仅占 100.x/32

五、根因分析
线程泄漏 → 线程池耗尽 → 进程内部死锁。

判定依据(三特征同时成立才判定死锁):

  • 线程数异常:4856,同机其他荣耀进程最高 342,差一个数量级;
  • CPU 时间冻结:连续采样 CPU 时间完全不变,说明没有任何有效工作;
  • 内存反降:37.9 MB(正常 164 MB),说明连内存分配都已失败。


进程不死、不崩、不报错,所以界面显示正常、事件日志无记录, 用户和厂商侧都极难发现。

为什么两组症状会同时出现:死锁发生时,进程内所有工作线程(设备发现、mDNS/BLE 扫描、 云端心跳、剪贴板监听)全部阻塞。同时它在死锁前若已调用 OpenClipboard() 取得剪贴板锁, 因为走不到配对的 CloseClipboard(),这把全局锁就被永久占用。

为什么二维码刷不出来:二维码由云端下发——服务需先向荣耀云申请一次性配对凭证 token, 拿到后才渲染图片。线程池死锁后该请求根本发不出去,因此二维码永远空白。 修复前它一条外部连接都没有,印证了「请求未发出」而非「被拒绝」。

为什么手机端还能看到彼此:手机、平板的信任环走各自系统,与本机进程无关。 电脑不再向云端注册在线状态,于是在手机端的环里直接消失。


六、泄漏速率观测(供研发参考)
线程增长呈非线性,不同阶段差异很大:

[td]
观测点线程数变化折算速率
修复后 15 分钟433 → 800约 25 个/分钟
修复后 19 分钟800 → 802约 0.5 个/分钟(已趋平台)
无设备连接时 42 分钟360 ~ 365 波动基本不增长
11/01 开机 → 11/05 死锁约 400 → 4856约 0.77 个/分钟
结论:泄漏速率与「是否有设备在线并频繁同步」强相关。 有设备连接、数据同步频繁时快速堆积;无设备时基本平稳。 因此该缺陷在「日常不连设备」的使用场景下不易暴露,一旦经常用多设备协同则很快恶化。


七、影响评估[td]
维度说明
功能影响多设备协同完全不可用;严重时全系统复制粘贴中断,办公场景完全瘫痪
可诊断性极差。进程不崩溃、无错误日志、界面显示正常,用户无法归因
恢复成本需管理员权限终止系统目录下的进程,普通用户难以完成
发生频率本机一周内观察到 2 次(一次表现为设备失效,一次表现为剪贴板失效)
触发条件未知,与用户操作无明确关联;未配对设备时也可能发生

八、修复建议
1. 修复线程泄漏(根本) 排查线程创建后未回收的路径,重点检查设备发现/重连逻辑中的重试分支 ——推测长时间重连失败会不断新建线程而不回收。

2. 保证资源配对释放 所有 OpenClipboard() 必须置于 try/finally(或 RAII)中,确保任何异常分支都执行 CloseClipboard()。 建议对持锁加超时保护:持锁超过 N 秒强制释放并记录日志。

3. 改用事件驱动替代长期持锁 建议使用 AddClipboardFormatListener + WM_CLIPBOARDUPDATE 消息通知, 避免在需要读取内容时长期占用剪贴板锁。这样即使服务内部死锁,也不会阻塞其他程序。

4. 未配对设备时不应监听剪贴板 本机 PCIsAuthorState=0、PairDeviceAuthor=0、SuperTerminalCanRun=0, 即无任何可用设备,此时监听剪贴板无业务意义。建议无配对设备时跳过监听,直接缩小故障面。

5. 增加死锁自愈看门狗 建议服务内部定期自检,满足以下任一条件时主动退出并由父进程重启:

  • 线程数 > 1000 且持续增长
  • CPU 时间在采样窗口内零增长(本报告验证的最灵敏判据)
  • 连续 N 次心跳/云端请求失败


本机已验证:父进程 PCManagerMainService 能可靠拉起新实例,且新实例状态健康, 自愈方案可行。

6. 提升故障可观测性 服务异常时向用户提示(如托盘通知「设备互联服务异常,已自动重启」), 避免用户在完全无感知的情况下遭遇功能失效。


九、附录:用户侧应急恢复与自检# 应急恢复(管理员权限):终止死锁进程,父进程会在 2 秒内拉起新实例Stop-Process -Name HnTrustCircleService -Force
自检三判据(供验证是否死锁):

$p = Get-Process HnTrustCircleService”线程数: $($p.Threads.Count)”                                          # 正常 300~500,异常 > 2000$c1 = $p.TotalProcessorTime.TotalSeconds; Start-Sleep 3$c2 = (Get-Process HnTrustCircleService).TotalProcessorTime.TotalSeconds”CPU 3秒增量: $([math]::Round($c2-$c1,3))s”                            # 为 0 即冻结,判定死锁Get-NetTCPConnection -OwningProcess $p.Id |                          # 正常应有云端 + 局域网连接  Where-Object { $_.RemoteAddress -notmatch ´^(127\.|::1|0\.0\.0\.0|::$)´ } |  Select-Object State,RemoteAddress,RemotePort


作者声明:作品含AI生成内容
您需要登录后才可以评论 登录 | 立即注册
简体中文 - China
快速回复 返回顶部 返回列表