Время жизни объекта 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,

Другие вопросы по тегам