Lua在恢复协同程序时出现段错误。

有一份代码,当定时器在协程内创建时,在 Lua 核心内恢复时会发生段错误。回溯:

它在 522 行上崩溃(lua 5.2) n = ( ci->u.c.k)(L); / call continuation */

有人熟悉 Lua 核心吗?为什么会发生这种情况?

点赞
用户1940679
用户1940679

问题在于我将当前的 Lua_State 保存在 evtimer.new 中,并在调用 timer 回调时(使用 pcall)在调用 evtimer.new 的线程上下文中进行。 在这种情况下,当定时器尝试调用回调时,线程不会被恢复,这会导致 Lua 内部状态的破坏。 我通过在 C 侧使用 lua_resume 来恢复线程,而不是调用 Lua 回调来解决了这个问题。

2014-09-20 19:41:41