多个lua_calls退出并生成" C堆栈溢出"

时间:2016-07-12 10:54:49

标签: c++ lua

我在使用C ++和多个Lua绑定的多进程环境中工作,使用Lua函数来管理进程的某些方面,其中包含一个共享的Lua上下文。

我使用的一般形式是挂钩某些事件,触发Lua函数,然后转换为C ++代码。

我在堆栈上推送两个与进程相关的参数,然后发出

lua_call(L, 2, 0);

问题是某些特定的lua_call达到了kill函数(预期的行为),但由于lua_call没有返回,所以堆栈不会被释放。在大约200个这样的调用之后,由于C堆栈溢出,Lua发生了恐慌。

我已经在每个钩子上打印了Lua堆栈,我可以看到它在增长。我尝试使用lua_pop(L, 2)(堆栈每次增长2),lua_settop(L, 0)之后Lua使用参数并发出回调,就在杀死进程之前,但无济于事。

我无法调用lua_close(L),因为这会破坏进程间共享的上下文,并导致其他进程访问NULL上下文。

1 个答案:

答案 0 :(得分:0)

我的解决方法是直接杀死发出lua_call的进程,而是设置一个标志并在调用返回后终止它,确保没有剩余的堆栈帧。

再次感谢Chris Beck对Lua堆栈如何工作的深刻见解。