环境: kamailio.4.0.3+centos+mysql
情况描述:
(1)对于modules/xcap_server 进行功能的扩充, 当客户端发送HTTP PUT请求,根据打印出的内存分配LOG, 其中申请和释放的内存都能完全匹配[能看成内存未泄露吗?]
但是使用free命令查看系统会发现少了接近3M的内存泄露。
(2) 若将使用的kamailio提供的pkg_*的函数的 变为C语言提供的内存函数(malloc等),则不会出现内存泄露。
(3) 当多次处理PUT请求之后, q_malloc(mem): line 156
LOG(L_CRIT, "BUG: qm_*: prev. fragm. tail overwritten(%lx, %lx)[%p:%p]!""\n",
PREV_FRAG_END(f)->check1, PREV_FRAG_END(f)->check2, f,
(char*)f+sizeof(struct qm_frag));
会打印出来。 可不明白这样的错误是怎么造成的,如何避免。
注: 每次内存泄露的比较多,但代码中分配的内存每次都控制在1000字节之内。
我个人觉得应该是自己代码的出的问题,可根据(1)(2)感觉自己的代码也没问题的。
也许自己对于pkg_*的代码不太理解,希望大神能科普一下。