缺陷报告:HnTrustCircleService 线程泄漏导致进程死锁,引发「设备发现失效」与「全局剪贴板锁死」
最先发现复制粘贴失效,自行查找问题无果后通过WorkBuddy查找出问题。后来发现信任环失效,售后建议恢复系统,没同意,又用WorkBuddy查找出问题,今天再次发现粘贴复制失效,回顾原先的对话,发现和信任环失效的故障同源,于是让WorkBuddy生成以下报告,希望荣耀能早日修复这个BUG。 一、概要HnTrustCircleService.exe(信任环服务)存在线程泄漏并最终死锁的缺陷。 死锁后进程仍然存活、任务管理器和电脑管家界面均显示「正常」,但内部已完全停止工作, 导致两组互不相关的外部症状:
- 设备发现失效:电脑看不到手机/平板(手机端彼此可见),配对二维码始终刷不出来;
- 全系统复制粘贴失效:该进程死锁时持有的全局剪贴板锁不归还,所有程序的复制粘贴被阻塞。
两种症状都是同一进程死锁的不同表现,取决于死锁时它正持有哪些资源。 用户侧完全无法自行判断原因,通常误以为是系统故障。
二、受影响环境[td]| 项目 | 值 | | 机型 | HONOR DRA-XX(MagicBook Pro 16 HUNTER 2024) | | CPU | Intel Core Ultra 7 155H | | 操作系统 | Microsoft Windows 11 专业版,10.0.26300(Build 26300) | | BIOS | 1.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 MB | 164 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 5353 | Dnscache 与百度网盘/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
|