dataqueue内存泄漏

发布于 2021-01-27 15:15:10

“图-1”中,rt_data_queue_init()函数使用rt_malloc()动态分配内存;但是“图-2”中rt_data_queue_reset()函数只是resume在等待dataqueue的线程,并没有free内存(还有线程在使用当然不能free)。

例如stm32f4xx-HAL例程,如果使用该dataqueue的serial设备需要close,怎么释放rt_data_queue_init()函数里动态分配内存呢?

“图-3”是rt_serial_open()函数代码段,调用rt_data_queue_init()初始化dataqueue;“图-4”是rt_serial_close()函数代码段,772行代码会导致dataqueue内存泄漏

图-1 rt_data_queue_init()函数
1.png

图-2 rt_data_queue_reset()函数
2.png

图-3 rt_serial_open()函数代码段
3.png

图-4 rt_serial_close()函数代码段
4.png

查看更多

关注者
0
被浏览
261
fubaojun2006
fubaojun2006 2021-02-04

楼主,看到的代码确认是有问题的,我已经踩坑了。
另外,提问时,最好给出使用的RTT 版本。这样比较容易追踪
解决办法:
同步git 最新代码,最新代码里面这里有一些改变
dataqueue释放.png
3bc4498b60c8ac9d170c0569afb89acf.png

4 个回答
bernard
bernard 2021-01-27

是哪个地方调用了reset?

还是说,在serial close时的时候,需要把data queue整体关闭,移除释放掉?

xiecy906
xiecy906 2021-01-29

没有大神交流交流!!!!!!!!!!!!!!!!!!!!!!!!!!

iamyhw
iamyhw 2021-01-30

在rt_serial_close()中已经调用了
rt_data_queue_deinit(&(tx_dma->data_queue));
这个就是扫尾的你说的地方

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览