云风

Results 174 comments of 云风

https://github.com/cloudwu/skynet/commit/31a468827f86c416906fda4db33641642d27c6a7 https://github.com/cloudwu/skynet/commit/6a7043cfac0c64d505351283957c9854165f22db 和它是相关的,不可以单独使用 https://github.com/cloudwu/skynet/commit/d629648897b457d34fdf66531c212e94aa39f8f0

为避免问题,我已将以上几个关联 commit 合并为一个:https://github.com/cloudwu/skynet/commit/89a821ced05f163b07b9e74193ad1a9337ba6205 后续几个 commits 是为了修复其中没有写对的 `skynet_calloc()`

我查了一下,skynet 中并没有直接使用 calloc 。我的系统上并不会出错,所以你需要具体定位你的问题。

你可以 gdb 看看出错在哪里。或者再 review/debug 一下 https://github.com/cloudwu/skynet/commit/89a821ced05f163b07b9e74193ad1a9337ba6205 ,它的修改并不复杂。就是把 memory cookie 从内存块的尾部移到了头部而已,并额外记录了内存块的 size ,不再依赖 `malloc_usable_size` 。理论上来说,它减少了而不是增加了对 CRT 的依赖。

@EfveZombie 也可以看看之前的修改会不会还有什么问题。 @hanyu363 你可以加上 `MEMORY_CHECK` 宏,看看是否能发现问题。

> 重新 review 了一下, 没看出什么会导致 crash 的问题, 可能 `skynet_realloc` 中先 `get_cookie_size` 再 `clean_prefix` 语义会比较明确一些, 然后 `skynet_calloc` 里面 `fill_prefix` 的 `size` 参数填 `nmemb * size` 跟其它接口的含义统一, 不过都不影响逻辑正常运行才对 是的,这个只影响统计,且 skynet 事实上并没有使用 calloc...

@lvzixun tls 握手阶段是否应该在出错时先关闭 fd ? 即这个 pcall 需要内置在 init 函数内。 看起来 httpc https://github.com/cloudwu/skynet/blob/1ba381a1c209ae6eea8ecec0fffac90a3340f350/lualib/http/httpc.lua#L98 也有这个问题

这些描述是现象而表达不了原因。依靠这些无法定位问题。 你需要在你的环境调试找到为什么 coroutine 是 dead coroutine ,以及为什么 401 行的 `coroutine_yield "SUSPEND"` 会返回 boolean 。 ps. 下次请用 markdown 语法编辑文本和代码,不要发图片。

补充: 402 行的 f ,是从线程池 (`coroutine_pool`) 中取出之前结束的线程,然后在 https://github.com/cloudwu/skynet/blob/master/lualib/skynet.lua#L408 这里传入的新的主函数。