From 14b77079a892dc42219217688684ed9d6c4d0e3d Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Mon, 21 Jun 2010 10:11:59 -0700 Subject: [PATCH] dns: don't get stuck on no packet received Make sure the timeout actually gets processed. The right thing to do for the receive loop is to check for timeout, then try to receive, and loop until an acceptable packet has been received; we might as well do that explicitly. Signed-off-by: H. Peter Anvin --- core/fs/pxe/dnsresolv.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/core/fs/pxe/dnsresolv.c b/core/fs/pxe/dnsresolv.c index 76a905a..2b263fa 100644 --- a/core/fs/pxe/dnsresolv.c +++ b/core/fs/pxe/dnsresolv.c @@ -247,7 +247,10 @@ uint32_t dns_resolv(const char *name) continue; oldtime = jiffies(); - while (1) { + do { + if (jiffies() - oldtime >= timeout) + goto again; + udp_read.status = 0; udp_read.src_ip = srv; udp_read.dest_ip = IPInfo.myip; @@ -256,16 +259,8 @@ uint32_t dns_resolv(const char *name) udp_read.buffer_size = PKTBUF_SIZE; udp_read.buffer = FAR_PTR(DNSRecvBuf); err = pxe_call(PXENV_UDP_READ, &udp_read); - if (err || udp_read.status) - continue; - - /* Got a packet, deal with it... */ - if (hd2->id == hd1->id) - break; + } while (err || udp_read.status || hd2->id != hd1->id); - if (jiffies() - oldtime >= timeout) - goto again; - } if ((hd2->flags ^ 0x80) & htons(0xf80f)) goto badness; -- 2.7.4