Время жизни объекта Lua глобально возвращено в C

Итак, у меня есть очень простой Lua-скрипт:

return coroutine.create(function () coroutine.yield(1) end)

А затем в C я запускаю его и получаю возвращаемое значение

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 недействительным? Если да, то что я могу сделать, чтобы предотвратить это?


person KevinResoL    schedule 08.02.2018    source источник
comment
Вы должны сохранить это значение в реестре, чтобы сборщик мусора не съел его. см. также   -  person Egor Skriptunoff    schedule 08.02.2018


Ответы (1)


С небольшой осторожностью вы можете просто оставить сопрограмму в стеке. Просто удалите вызов lua_pop.

person lhf    schedule 08.02.2018
comment
но потом я не мог очистить его от стека? Потому что я бы потерял позицию в стеке для этого конкретного значения сопрограммы? - person KevinResoL; 17.08.2018