- 各位好,我发现一个最基本的问题,就是我重复使用
socket()
,closesocket()
函数,显示的内存会一直增加。
代码如下
start:
socketfd = socket(AF_INET, SOCK_STREAM, 0);
if(socketfd < 0)
{
LOG_E("create socket fail");
goto start;
}
rt_size_t total = 0, used = 0, max_used = 0;
rt_memory_info(&total, &used, &max_used);
LOG_I("used : %d\n", used);
LOG_I("socket fd:%d",socketfd);
// rt_sprintf(tmp,"%d.%d.%d.%d",m_systempara.netpara.dst_ip[0],
// m_systempara.netpara.dst_ip[1],
// m_systempara.netpara.dst_ip[2],
// m_systempara.netpara.dst_ip[3]);
// r = tcpclient_connect(socketfd,tmp,m_systempara.netpara.dst_port);
r = -1;
if(r < 0 )
{
closesocket(socketfd);
内存打印结果如下:

看到没有,每次一次分配释放,内存都增加64字节。很奇怪,于是从closesocket函数中找,发现


发现这个地方释放的时候是多了64字节,但是这个d->vnode
是必须释放的,是不是再其他地方又释放了一遍了,那只可能在 fd_release()
函数里面。
于是在fd_release()
里面查找,

果不其然,这个地方也释放了一遍,打印的log也验证了我的猜测。

同个地址被释放了两次。
- 曾经我对rtt很是信任,但上一篇发现了at socket的bug,这次是这个,我的项目很急,但是发去好大精力找组件的bug,浪费了我好多时间,希望发布者能够充分验证。
查历史这个有做过更新
为啥我用的是发布的5.0.1版本,没有修复,但是这个主分支确实改过来了。