fix(desk): 事件环越界 —— 64 槽超出每 pid 0x1000 区间
每 pid 事件环按 0x1000=4096B 间隔排布,而环总大小 = RingCtrl(16) + 64 × DeskMsg(64) = 4112B:第 63 号槽的最后 16 字节正好覆盖下一个 pid 的 RingCtrl(head/tail/size/_pad 被写成消息尾部)。后果:下一个 pid 的环 size=0、head==tail ⇒ 该进程的键盘/鼠标事件永远收不到;再对它 ring_push 会算 (tail+1)%0,除零异常直接打死 explorer —— 这就是'多窗口关闭后容易卡死/键盘无效'的根因之一。改为 63 槽(4048B),落在区间内。
This commit is contained in:
1 parent
266e6fbcfb
commit
e839b37ee2
1 file changed
+4
-1
+4
-1
@@ -32,7 +32,10 @@ define DESK_VERSION = 1
|
||||
|
||||
define DESK_MAX_WIN = 8
|
||||
define DESK_TITLE_MAX = 32
|
||||
define DESK_RING_SLOTS = 64
|
||||
# 每 pid 事件环间隔 0x1000;环总大小 = RingCtrl(16) + SLOTS × DeskMsg(64),必须 ≤ 0x1000。
|
||||
# 64 槽会占 4112B,第 63 号槽的尾部覆盖下一个 pid 的 RingCtrl(size 被写 0 ⇒ 该 pid 收不到事件,
|
||||
# 且 ring_push 的 (tail+1)%0 会除零打死图形壳),所以取 63(4048B)。
|
||||
define DESK_RING_SLOTS = 63
|
||||
|
||||
# 固定偏移
|
||||
define DESK_OFF_HEADER = 0x000000
|
||||
|
||||
Reference in new issue
Block a user