-
Notifications
You must be signed in to change notification settings - Fork 46
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
DbAccessor 不确定释放时机可能导致输入法崩溃 #376
Comments
我試着 產生 DbAccessor 後 ,關閉 leveldb 的確會崩潰 (TableDb 不會) |
我这里的用例是在 filter 中 query 然后产生一些新候选然后导致手机端崩溃。实际上一些崩溃日志正好显示是 luaTransltion::~LuaTranslation() 中的 gc 导致的。 情况大概可能是这样:
我在 query 完毕后手动触发 collectgarbage 可以解决该问题,所以觉得应该是这个情况(暂时也没有完全搞明白)。 |
有一个更简单的fix,只要在 db:close() 之前 collectgarbage() 一次就可以保证不崩溃,不需要在每次 query 之后 collectgarbage。 所以也可以让 db:close() 内置一个 collectgarbage() 把 DbAccessor 先关掉。这样不是很稳(有可能仍然持有 DbAccessor 引用),但是对于大部分正确使用 init fini 的组件(进入 fini 时已经失去所有 DbAccessor 引用)来说应该已经足够了。 所以修改了一下 issue 标题。 |
DbAccessor 必须在 Db 本身被释放前释放。目前 Lua 中没有手动释放的接口,仅凭 GC 会由于不确定的释放顺序导致输入法崩溃。
related: #354
The text was updated successfully, but these errors were encountered: