Skip to content

Commit 73bd7a7

Browse files
authored
Merge pull request #4868 from wenbodong2015/at_memleak
解决at_socket内存泄漏问题
2 parents 6c5546c + 0f6586c commit 73bd7a7

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

components/net/at/at_socket/at_socket.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <string.h>
1414
#include <ctype.h>
1515
#include <sys/time.h>
16+
#include <sys/errno.h>
1617

1718
#include <at_socket.h>
1819
#include <at_device.h>
@@ -78,15 +79,15 @@ struct at_socket *at_get_socket(int socket)
7879
}
7980

8081
/* get a block to the AT socket receive list*/
81-
static size_t at_recvpkt_put(rt_slist_t *rlist, const char *ptr, size_t length)
82+
static rt_err_t at_recvpkt_put(rt_slist_t *rlist, const char *ptr, size_t length)
8283
{
8384
at_recv_pkt_t pkt = RT_NULL;
8485

8586
pkt = (at_recv_pkt_t) rt_calloc(1, sizeof(struct at_recv_pkt));
8687
if (pkt == RT_NULL)
8788
{
8889
LOG_E("No memory for receive packet table!");
89-
return 0;
90+
return -RT_ENOMEM;
9091
}
9192

9293
pkt->bfsz_totle = length;
@@ -95,7 +96,7 @@ static size_t at_recvpkt_put(rt_slist_t *rlist, const char *ptr, size_t length)
9596

9697
rt_slist_append(rlist, &pkt->list);
9798

98-
return length;
99+
return RT_EOK;
99100
}
100101

101102
/* delete and free all receive buffer list */
@@ -651,14 +652,20 @@ static void at_recv_notice_cb(struct at_socket *sock, at_socket_evt_t event, con
651652
RT_ASSERT(event == AT_SOCKET_EVT_RECV);
652653

653654
/* check the socket object status */
654-
if (sock->magic != AT_SOCKET_MAGIC)
655+
if (sock->magic != AT_SOCKET_MAGIC || sock->state == AT_SOCKET_CLOSED)
655656
{
657+
rt_free((void *)buff);
656658
return;
657659
}
658660

659661
/* put receive buffer to receiver packet list */
660662
rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER);
661-
at_recvpkt_put(&(sock->recvpkt_list), buff, bfsz);
663+
if (at_recvpkt_put(&(sock->recvpkt_list), buff, bfsz) != RT_EOK)
664+
{
665+
rt_free((void *)buff);
666+
rt_mutex_release(sock->recv_lock);
667+
return;
668+
}
662669
rt_mutex_release(sock->recv_lock);
663670

664671
rt_sem_release(sock->recv_notice);

0 commit comments

Comments
 (0)