Hello!
2014-08-17 19:22 GMT-07:00 ywsample:
> 1, 第一次编译openresty-1.7.2.1 (./configure --prefix=XXX --with-cc-opt='-O0' -j4)
> 完测试, curl localhost:8002/test,没有问题
> 2, 重新执行make install之后,再次curl localhost:8002/test(期间nginx不重启),就出现SIGSEGV信号了
> 3, 之后再次请求就请求又正常了,但是重复2的步骤又会出现同样的问题
>
多谢你提供的复现步骤!我检查了一下,确实是新版 lua-cjson 里的一个 bug,即它的 Makefile 里在安装 cjson.so
时单纯使用了 cp 命令直接对已有的 cjson.so 进行了改写,而原先的 cjson.so
已经被正在运行的可执行文件加载和映射,直接就地改写原文件会导致不可预期的结果(比如 core dump)。正确的做法是先 rm(或
unlink),再进行 cp. OpenResty 1.5.8.1 中包含的老版本的 lua-cjson 则是使用的是 install
命令,它总是会先 unlink 老文件再行创建新文件,所以不会出现问题。
稍后我会提交一个补丁修复一下这个问题,多谢报告!
Regards,
-agentzh