Я хочу вызвать функцию в Lua из библиотеки C, но сделать это асинхронно.
У меня есть некоторый код Lua, который выглядит следующим образом:
l = require "mylib"
l.subscribe(function ()
print("Called")
error("This is an error")
end)
mylib
реализовано с использованием Lua C API. Это выглядит примерно так:
struct cb {
int ref;
lua_State *state;
}
int number_callbacks;
struct **cb callback_functions;
static int subscribe(lua_State *L) {
lua_settop(L, 1);
luaL_checktype(L, 1, LUA_TFUNCTION);
struct cb c;
c.ref = luaL_ref(L, LUA_REGISTRYINDEX);
c.state = L;
// store c in callback_functions
}
// foo is registered as a callback to another C lib and
// is called occasionaly
static void foo(int callback_code) {
for (int i = 0; i < number_callbacks; i++) {
struct cb c = callback_functions[i];
lua_rawgeti(c->state, LUA_REGISTRYINDEX, c->ref);
lua_pushinteger(c->state, callback_code);
int ret = lua_pcall(c->state, 1, 0, 0);
// Check ret...
}
}
Сообщение в обратном вызове печатается, однако error
отображается не в том месте (говорит, что оно было вызвано какой-то не связанной функцией). Я предполагаю, что это потому, что состояние Lua изменилось.
Как правильно это сделать?