我用c写了一个库,没有使用ffi的方式,编译成lua库so加载使用。在openresty中定义一些lua函数,然后,放到lua的注册表中(LUA_REGISTRYINDEX),在客户端发送请求之后,会调用so中的函数,最终会从注册表中找到需要的lua函数,回调,我发现,在lua函数中不能使用由cosocket实现的库,比如lua-resty-http,会导致worker退出
出现下面这种日志:
2022/12/20 23:39:55 [alert] 404#404: worker process 471 exited on signal 6 (core dumped)
我想请问下,这是什么问题造成的,以及怎样才能正确的调用这些库,感谢。
下面是我简化了的一些代码和说明
local cc = require "lib.cc"
cc.register("error", function(...)
ngx.log(ngx.ERR, ...)
return true
end)
--这种调用lua自带的函数是没有问题的
cc.register("run", function(s) {
os.execute(s)
return true
end
--这种就会导致退出
cc.register("notifyurl", function(url, text)
local httpc = http.new()
local res, err = httpc:request_uri(url, { method = "POST",
headers = {["Content-Type"] = "application/json; charset=UTF-8"},
body =xxx,
})
return true
end)
router:post("/execute/:id", function(req, res, next)
cc.execute(req.body)
end)
我用了lor框架,收到post请求会调用到上面的这个函数,这个函数会调用库的execute,最终会根据解析到的字符串,回调到上面注册的对应函数,如果是notifyurl,那就会出现上述问题