CMUX部分是否有内存泄漏?

发布于 2020-07-09 17:15:25

1,我用CMUX+PPP测试,使用ppp的ppp_start与ppp_stop来回切换ppp连接(开启与断开),发现内存泄漏。
2,之前单独使用ppp,使用ppp的ppp_start与ppp_stop来回切换ppp连接(开启与断开),未发现内存泄漏,是否是CMUX这部分还有内存泄漏问题。
QQ图片20200709170810.jpg
QQ图片20200709170817.png

3,针对CMUX数据帧解析完之后,返回的指针的内存有时候是不是没有释放。我把指针打印出来发现返回的指针不在环形缓冲区的范围内,但是也没有去释放空间。

查看更多

关注者
0
被浏览
286
2 个回答
xiangxistu
xiangxistu 2020-07-09

是不是每次控制通道数据进来,都会丢失几个字节?
长度大概是 struct cmux_frame 的长度?

struct cmux_frame
{
    rt_uint8_t channel;                                   /* the frame channel */
    rt_uint8_t control;                                   /* the type of frame */
    int data_length;                                      /* frame length */
    rt_uint8_t *data;                                     /* the point for cmux data */
};

大概是 5 个字节?


确实有内存泄露的情况,泄露的位置是申请的 cmux_frame 的指针的大小;

  1. 只有非控制通道的 frame 指针被挂在等待链表,等待读取;
  2. 只有读取过的 frame 指针被释放;
  3. 控制通道的 frame 指针没有挂在等待链表上,也没有释放的机会。

解决办法是:


LOG_D("this is UI or UIH frame from channel(%d).", frame->channel);
if (frame->channel > 0)
{
   /* receive data from logical channel, distribution them */

   cmux_frame_push(cmux, frame->channel, frame);
   cmux_vcom_isr(cmux, frame->channel, frame->data_length);
}
else
{
   cmux_frame_destroy(frame);
   /* control channel command */
   LOG_W("control channel command haven't support.");
}
guanxionghui
guanxionghui 2020-07-09

{{20200709-172709.log(uploading...)}}补充测试log。Snipaste_2020-07-09_17-29-31.png

撰写答案

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

发布
问题

分享
好友