[ping] fix ping error busyloop add goto wait

Signed-off-by: meijian <meijian@xiaomi.com>
This commit is contained in:
meijian 2024-03-27 11:02:33 +08:00 committed by Petro Karashchenko
parent a7cffe03b5
commit 255df7c01f

View File

@ -277,12 +277,12 @@ void icmp_ping(FAR const struct ping_info_s *info)
if (priv->nsent < 0)
{
icmp_callback(&result, ICMP_E_SENDTO, errno);
continue;
goto wait;
}
else if (priv->nsent != result.outsize)
{
icmp_callback(&result, ICMP_E_SENDSMALL, priv->nsent);
continue;
goto wait;
}
priv->elapsed = 0;
@ -298,18 +298,18 @@ void icmp_ping(FAR const struct ping_info_s *info)
if (ret < 0)
{
icmp_callback(&result, ICMP_E_POLL, errno);
goto done;
goto wait;
}
else if (ret == 0)
{
icmp_callback(&result, ICMP_W_TIMEOUT, info->timeout);
continue;
goto wait;
}
if (priv->recvfd.revents & (POLLHUP | POLLERR))
{
icmp_callback(&result, ICMP_E_POLL, ENETDOWN);
continue;
goto wait;
}
/* Get the ICMP response (ignoring the sender) */
@ -322,12 +322,12 @@ void icmp_ping(FAR const struct ping_info_s *info)
if (priv->nrecvd < 0)
{
icmp_callback(&result, ICMP_E_RECVFROM, errno);
goto done;
goto wait;
}
else if (priv->nrecvd < sizeof(struct icmp_hdr_s))
{
icmp_callback(&result, ICMP_E_RECVSMALL, priv->nrecvd);
goto done;
goto wait;
}
priv->elapsed = TICK2USEC(clock() - priv->start);
@ -407,6 +407,7 @@ void icmp_ping(FAR const struct ping_info_s *info)
/* Wait if necessary to preserved the requested ping rate */
wait:
priv->elapsed = TICK2MSEC(clock() - priv->start);
if (priv->elapsed < info->delay)
{
@ -428,7 +429,6 @@ void icmp_ping(FAR const struct ping_info_s *info)
priv->outhdr.seqno = htons(++result.seqno);
}
done:
icmp_callback(&result, ICMP_I_FINISH, TICK2USEC(clock() - priv->kickoff));
close(priv->sockfd);
free(priv);