不知道你的 AT 组件是什么版本的,我的这部分代码如下所示,离线的时候已经把内存释放添加进去了。
下面的是 v2.0.4 或者最新版的AT组件的代码。你把你的 AT 组件的版本换成最新的再看一下。
/* rt-thread/components/net/at/at_socket/at_socket.c */
static void at_recv_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, size_t bfsz)
{
RT_ASSERT(buff);
RT_ASSERT(event == AT_SOCKET_EVT_RECV);
/* check the socket object status */
if (sock->magic != AT_SOCKET_MAGIC || sock->state == AT_SOCKET_CLOSED)
{
rt_free((void *)buff);
return;
}
/* put receive buffer to receiver packet list */
rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER);
if (at_recvpkt_put(&(sock->recvpkt_list), buff, bfsz) != RT_EOK)
{
rt_free((void *)buff);
rt_mutex_release(sock->recv_lock);
return;
}
rt_mutex_release(sock->recv_lock);
rt_sem_release(sock->recv_notice);
at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE);
}
不知道你的 AT 组件是什么版本的,我的这部分代码如下所示,离线的时候已经把内存释放添加进去了。
下面的是 v2.0.4 或者最新版的AT组件的代码。你把你的 AT 组件的版本换成最新的再看一下。
/* rt-thread/components/net/at/at_socket/at_socket.c */
static void at_recv_notice_cb(struct at_socket *sock, at_socket_evt_t event, const char *buff, size_t bfsz)
{
RT_ASSERT(buff);
RT_ASSERT(event == AT_SOCKET_EVT_RECV);
/* check the socket object status */
if (sock->magic != AT_SOCKET_MAGIC || sock->state == AT_SOCKET_CLOSED)
{
rt_free((void *)buff);
return;
}
/* put receive buffer to receiver packet list */
rt_mutex_take(sock->recv_lock, RT_WAITING_FOREVER);
if (at_recvpkt_put(&(sock->recvpkt_list), buff, bfsz) != RT_EOK)
{
rt_free((void *)buff);
rt_mutex_release(sock->recv_lock);
return;
}
rt_mutex_release(sock->recv_lock);
rt_sem_release(sock->recv_notice);
at_do_event_changes(sock, AT_EVENT_RECV, RT_TRUE);
}
举报