jmb_buf buffer;
int DoFunc(lua_State* p)
{
if(!setjmp(buffer))
{
try
{
luaL_error(p, "error");
//throw "error"; //if I use throw, the program works fine
}
catch(...)
{
longjmp(buffer, 1);
}
}
else
{
printf("LongJmp\n");
}
}
int main()
{
lua_State* p = luaL_newstate();
DoFunc(p);
DoFunc(p); //abort
lua_close(p);
return 0;
}
If I use lua_error to throw a exception, the program will abort when second call DoFunc.The output is
LongJmp
terminate called without an active exception
aborted
But when I use throw instead, all works fine. My linux version is 2.6.18-164.el5 x86_64
I know that longjmp will jump the stack, maybe use lua_error and longjmp destroy something in luajit and then use lua_error again cause abort?
In the luajit extensions, it said "Throwing Lua errors across C++ frames is safe", maybe can't be used with longjmp at same time?