久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3459|回復: 0
打印 上一主題 下一主題
收起左側

內存泄露問題的解決過程

[復制鏈接]
跳轉到指定樓層
樓主
ID:113276 發表于 2016-4-10 20:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
測試中發現有內存泄露的情況,通過增加內存的信息通過TCP輸出的 2301端口debug后發現
  異常的如下
總內存數(字節):6144
已用內存(字節):5816
剩余內存數(字節):328
使用標示:1
正常的如下
總內存數(字節):6144
已用內存(字節):20
剩余內存數(字節):6124
使用標示:1
顯然memalloc使內存溢出查找代碼因為除了SMTP應用程序使用malloc外其他不具有使用的情況。
所以肯定是SMTP出問題
進一步分析代碼為SMTP的smtp_send_mail()中
smtp_send_mail_alloced(struct smtp_session *s)
函數使用的
s = (struct smtp_session *)SMTP_STATE_MALLOC((mem_size_t)mem_len);
分配了一塊內存沒有事正常的釋放。
這樣反復
幾次最終導致這塊應用代碼不能正常返回一塊完整的 mem_le大小的內存塊而一直保留了328字節的剩余內存。
這最終導致了所有依賴mem的應用程序全部獲取不到足夠的內存塊。而出現的內存溢出。
繼續分析 釋放的內存句柄  (struct smtp_session *) s
發現幾處問題

1)非正常中止        “風險”
   if (smtp_verify(s->to, s->to_len, 0) != ERR_OK) {
    return ERR_ARG;
  }
  if (smtp_verify(s->from, s->from_len, 0) != ERR_OK) {
    return ERR_ARG;
  }
  if (smtp_verify(s->subject, s->subject_len, 0) != ERR_OK) {
    return ERR_ARG;
  }
  由于沒有對  smtp_send_mail_alloced 函數進行判斷所以如果此處返回會造成函數不能正常中止
  也就會導致 (struct smtp_session *) s        沒有機會釋放(因為在不正常中止時是在后面處理的)
  但是考慮到源數據是固定的從片上flash中取得的,這種幾率幾乎沒有。但是存在風險。所以統一改為
  if (smtp_verify(s->to, s->to_len, 0) != ERR_OK) {
             err = ERR_ARG;
     goto leave;
  }
  if (smtp_verify(s->from, s->from_len, 0) != ERR_OK) {
             err = ERR_ARG;
     goto leave;
  }
  if (smtp_verify(s->subject, s->subject_len, 0) != ERR_OK) {
             err = ERR_ARG;
     goto leave;
  }

  2)、非正常TCP連接,主要原因。
  原來的函數為:
  if(tcp_bind(pcb, IP_ADDR_ANY, SMTP_PORT)!=ERR_OK)
        {
        return        ERR_USEl;
            
        }
  顯然還是同樣的會造成malloc 分配了但是沒有被調用,修改為
  if(tcp_bind(pcb, IP_ADDR_ANY,SMTP_PORT)!=ERR_OK)
  {
        err = ERR_USE;
    goto leave;                  
  }

   這樣          leave中就會自動處理釋放掉這個非正常中止的而造成的內存的溢出問題。
   leave:
  smtp_free_struct(s);
  return err;

歸根結底是一個問題。那就是必須保證malloc 和free 成對出現。
實際驗證時發現就是tcp_bind的時反回了(在100K以上的壓力數據下)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 二区精品| 国产中文字幕网 | 精品久久久久久国产 | 久久亚洲一区 | 午夜电影在线播放 | 国产视频精品在线 | 影音先锋久久 | 一区二区免费看 | 一区二区在线不卡 | 欧美成人激情视频 | 神马福利 | 黄色免费av | 情侣黄网站免费看 | 亚洲va欧美va天堂v国产综合 | 久久久久久久久久久久一区二区 | 在线免费观看黄色网址 | 欧美aaaaaaaaaa | 国产激情小视频 | 一区二区三区 在线 | 美女黄网 | 日韩成人一区 | 久久综合伊人一区二区三 | 精品日韩在线 | 亚洲欧美一区二区三区视频 | 亚洲一区二区三区免费在线观看 | 日韩精品视频在线免费观看 | 特黄视频 | 成人欧美一区二区三区在线播放 | 欧美日韩亚洲国产 | 久久久久国产精品一区二区 | 亚洲精品黑人 | 日韩免费毛片视频 | 久久综合久久自在自线精品自 | 中文字幕 在线观看 | 伊人中文字幕 | 国产高清精品一区二区三区 | 久久成人免费 | 国产成人艳妇aa视频在线 | 99精品电影| 毛片视频网站 | 一级做a爰片久久毛片免费看 |