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