Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lua引擎的又一个掉线问题 #202

Open
w4454962 opened this issue Dec 3, 2020 · 1 comment
Open

lua引擎的又一个掉线问题 #202

w4454962 opened this issue Dec 3, 2020 · 1 comment
Labels

Comments

@w4454962
Copy link

w4454962 commented Dec 3, 2020

当 handle_level 大于0 时

handle在lua引擎中是为 userdata 或者 table

他们在底层里 存在引用会 handle_ref 占用handle句柄
直到不存在任何引用 也就是被__gc 的时候 才会调用 handle_unref 释放handle句柄的占用

也就是说

全局表 = {}

if 玩家1 == 本地玩家 then
全局表[某单位] = true
end

只有一个玩家在引用该handle 而其他人没有,

当 lua进行gc时 会导致handle不同步 进而发生掉线

这个也是为什么前2年 用jass2lua 测试一些jass地图会发生掉线的问题 那些地图里 没有注册闭包 也没有pairs 的掉线原因。
而且是在游戏40分钟后 也就是内存达到一定程度 lua自动gc的时候 才发生的掉线。

@w4454962
Copy link
Author

w4454962 commented Dec 3, 2020

应该在 RemoveUnit DestroyTrigger 这些 销毁方法 被调用时 进行handle_unref 解引用 不应该跟lua gc绑定到一起

也可以尝试在 先handle 转 object 然后hook 虚函数表+4 的析构方法 在析构对象时进行解引用, 这个不确定 需要下个断点 看看执行顺序

@actboy168 actboy168 added the bug label Dec 4, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants