Commit 2b48486
committed
fix(bridge): push 投递三阶段 lookup 防止 activeToken 卡死时投错进程
bug 现象: 用户在 Notepad 内按 Ctrl+Shift+E 切换方案, 任务栏图标不更新;
菜单切换模式 / 全半角 等情况同理。Go 日志能看到投递目标 PID 错位:
Push enqueued kind=state processID=76636 (意图: Notepad)
Push pipe write completed clientID=17 processID=66896 (实际: EverEdit)
根因: server_handler.go 故意只在 CMD_IME_ACTIVATED 时更新 activeToken
(兼容 EverEdit 双进程: A 进程发 FOCUS_GAINED 没 push pipe, B 进程持
push pipe 通过 IMEActivated 注册 token)。但 IMEActivated 不会随每次
焦点切换重发, 当焦点在 Notepad ↔ EverEdit 来回切时, activeProcessID
跟着更新, 但 activeToken 卡在最后一次 IMEActivated 设置的值。
pushToActiveClient / PushCommitTextToActiveClient 用 token-first 查表
直接命中错的 push handle。
修复 (pushToActiveClient + PushCommitTextToActiveClient 同步改造):
- Phase 1: token != 0 且 pushHandleToPID[h] == activeProcessID 才用
→ 单进程多 DLL 实例场景的精确路由
- Phase 2: pushClientsByPID[activeProcessID] 兜底
→ 正常单进程场景, 即使 activeToken 卡死也能正确投递
- Phase 3: token != 0 兜底 (不校验 PID)
→ 兼容 EverEdit 双进程: activeProcessID 是 A, token 指向 B 的 push
测试覆盖: 现有 8 个 push_pipe 回归测试全部通过。1 parent 1dfc972 commit 2b48486
1 file changed
Lines changed: 30 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
274 | 274 | | |
275 | 275 | | |
276 | 276 | | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
277 | 280 | | |
278 | 281 | | |
279 | | - | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
280 | 285 | | |
281 | 286 | | |
| 287 | + | |
282 | 288 | | |
283 | 289 | | |
284 | 290 | | |
285 | 291 | | |
286 | 292 | | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
287 | 300 | | |
288 | 301 | | |
289 | 302 | | |
| |||
356 | 369 | | |
357 | 370 | | |
358 | 371 | | |
359 | | - | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
360 | 375 | | |
361 | 376 | | |
362 | | - | |
363 | | - | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
364 | 381 | | |
365 | 382 | | |
366 | 383 | | |
367 | | - | |
| 384 | + | |
368 | 385 | | |
369 | 386 | | |
370 | 387 | | |
371 | 388 | | |
372 | 389 | | |
373 | 390 | | |
374 | 391 | | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
375 | 400 | | |
376 | 401 | | |
377 | 402 | | |
| |||
0 commit comments