mirror of
https://github.com/apache/nuttx.git
synced 2026-05-27 19:36:35 +08:00
rpmsg services: should release the tx buffer when rpmsg_send_nocopy failed
Otherwise, the tx buffer will be discarded and can no longer be obtained Signed-off-by: Bowen Wang <wangbowen6@xiaomi.com>
This commit is contained in:
@@ -100,6 +100,10 @@ static int usrsock_rpmsg_send_dns_request(FAR void *arg,
|
||||
net_lock();
|
||||
ret = rpmsg_send_nocopy(ept, dns, sizeof(*dns) + addrlen);
|
||||
net_unlock();
|
||||
if (ret < 0)
|
||||
{
|
||||
rpmsg_release_tx_buffer(ept, dns);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -225,6 +229,7 @@ int usrsock_request(FAR struct iovec *iov, unsigned int iovcnt)
|
||||
ret = rpmsg_send_nocopy(&priv->ept, buf, ret);
|
||||
if (ret < 0)
|
||||
{
|
||||
rpmsg_release_tx_buffer(&priv->ept, buf);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -228,6 +228,8 @@ static int usrsock_rpmsg_send_data_ack(FAR struct rpmsg_endpoint *ept,
|
||||
uint16_t valuelen_nontrunc,
|
||||
int32_t datalen)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ack->reqack.head.msgid = USRSOCK_MESSAGE_RESPONSE_DATA_ACK;
|
||||
ack->reqack.head.flags = 0;
|
||||
ack->reqack.head.events = events;
|
||||
@@ -249,7 +251,13 @@ static int usrsock_rpmsg_send_data_ack(FAR struct rpmsg_endpoint *ept,
|
||||
ack->valuelen = valuelen;
|
||||
ack->valuelen_nontrunc = valuelen_nontrunc;
|
||||
|
||||
return rpmsg_send_nocopy(ept, ack, sizeof(*ack) + valuelen + datalen);
|
||||
ret = rpmsg_send_nocopy(ept, ack, sizeof(*ack) + valuelen + datalen);
|
||||
if (ret < 0)
|
||||
{
|
||||
rpmsg_release_tx_buffer(ept, ack);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int usrsock_rpmsg_send_frag_ack(FAR struct rpmsg_endpoint *ept,
|
||||
@@ -980,6 +988,7 @@ static int usrsock_rpmsg_send_dns_event(FAR void *arg,
|
||||
FAR struct rpmsg_endpoint *ept = arg;
|
||||
FAR struct usrsock_rpmsg_dns_event_s *dns;
|
||||
uint32_t len;
|
||||
int ret;
|
||||
|
||||
dns = rpmsg_get_tx_payload_buffer(ept, &len, true);
|
||||
if (dns == NULL)
|
||||
@@ -993,7 +1002,13 @@ static int usrsock_rpmsg_send_dns_event(FAR void *arg,
|
||||
dns->addrlen = addrlen;
|
||||
memcpy(dns + 1, addr, addrlen);
|
||||
|
||||
return rpmsg_send_nocopy(ept, dns, sizeof(*dns) + addrlen);
|
||||
ret = rpmsg_send_nocopy(ept, dns, sizeof(*dns) + addrlen);
|
||||
if (ret < 0)
|
||||
{
|
||||
rpmsg_release_tx_buffer(ept, dns);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user