Skip to content

[fix] 修复 Incision 多 ClassLoader Bridge 路由 - #724

Merged
Micalhl merged 1 commit into
TabooLib:dev/6.3.0from
FxRayHughes:fix/incision-bridge-routing
Jul 30, 2026
Merged

[fix] 修复 Incision 多 ClassLoader Bridge 路由#724
Micalhl merged 1 commit into
TabooLib:dev/6.3.0from
FxRayHughes:fix/incision-bridge-routing

Conversation

@FxRayHughes

Copy link
Copy Markdown
Contributor

问题

Leaf 26.2 及第三方插件类被织入时,目标类的 defining ClassLoader 并不等于声明 advice 的插件 ClassLoader。存在多个 Incision lease 时,旧 Bridge 因无法唯一选择 dispatcher 而输出 dispatch unavailable,导致 NMS 与 AuraSkills 等目标失去回调。

修改

  • 将 Bridge 正常路由键改为结构化目标签名,defining ClassLoader 仅保留为旧调用方兼容路径。
  • 引入 canonical Bridge 句柄,保证 dispatcher、target、Gate 与 Bypass sentinel 始终操作 bootstrap 中的同一份静态状态。
  • 为 remap 后的 NMS 运行时坐标同步 dispatcher chain 别名,并在 heal 时清理逻辑/运行时全部投影。
  • 多 lease 下保留旧插件广播兼容,增加同目标多 dispatcher 冲突诊断。
  • Gate delegate 仅在最后一个 canonical lease 释放时清空,避免单插件卸载破坏其他插件。
  • 增加两个隔离 ClassLoader 的 Bridge 路由/lease 测试,以及 remap 运行时别名测试。

验证

  • git diff --check 通过。
  • 官方 Leaf 26.2 build 42 / Java 25 / Instrumentation 基线实测:371 pass / 0 fail / 1 not-applicable / 372 total
  • 日志中 dispatch unavailableNoClassDefFoundErrorVerifyError、Bridge dispatch failure 均为 0。
  • Leaf 实测使用合并 PR [feat] 重构 Incision API 与跨版本运行时后端 #723 后的现有 Incision-Test 产物;本补丁新增单测尚未在本地重新编译执行,交由上游 CI 验证。

本补丁是已合并 PR #723 的后续修复,没有对应的上游 Issue。

@Micalhl

Micalhl commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

@Micalhl
Micalhl merged commit 8f52574 into TabooLib:dev/6.3.0 Jul 30, 2026
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants