AT设备驱动中隐藏的内存泄漏

发布于 2020-08-05 18:06:55

AT设备驱动中隐藏的内存泄漏

问题分析

在AT设备驱动包中的大多设备都存在此内存泄漏bug,bug位于at_device_xxx.c文件的xxx_netdev_add函数。此函数在设备初始化时调用(函数xxx_init),申请内存、初始化网络设备、加网络设备到链表,但在设备去初始化时(函数xxx_deinit)并不会释放,也没必要释放。问题是设备再次初始化时会再次申请内存、初始化网络设备、加网络设备到链表。当网络经常断线,应用中使用deinit、init实现断线重建时,就会不断创建和增加网络设备,形成占用内存不断增加。

解决办法

在函数xxx_netdev_add的

netdev = (struct netdev *)rt_calloc(1, sizeof(struct netdev));

之前,加入代码

netdev = netdev_get_by_name(netdev_name);
if (netdev != RT_NULL)
{
    return (netdev);
}

bc26、me3616和ec200x不存在此bug。

查看更多

关注者
0
被浏览
234
4 个回答
mii
mii 2020-08-05

感谢大佬,希望各维护人员尽快修复

jerry2cool
jerry2cool 2020-08-06

感谢大佬分享。。。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友