Время жизни объекта Lua, "глобально возвращенного" в C
Итак, у меня есть очень простой скрипт Lua, подобный этому:
return coroutine.create(function () coroutine.yield(1) end)
А потом в CI запустить его и получить возвращенное значение
lua_State* l = luaL_newstate();
if(luaL_dostring(l, script) == LUA_OK) {
lua_State* co = lua_tothread(l, lua_gettop(l));
lua_pop(l, 1);
}
Позже код C пройдет co
указатель обратно в Lua (с lua_pushthread
) и беги coroutine.resume(co)
,
Я хотел бы знать, будет ли Lua GC объект сопрограммы в то же время, что делает co
указатель в C недействителен? Если да, что я могу сделать, чтобы предотвратить это?
1 ответ
С небольшой осторожностью вы можете просто оставить сопрограмму в стеке. Просто удалите звонок lua_pop
,