diff options
-rw-r--r-- | libc/inet/resolv.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index 752bf7fc1..6ceb07796 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -674,7 +674,7 @@ int __dns_lookup(const char *name, int type, int nscount, char **nsip, char *dns, *lookup = malloc(MAXDNAME); int variant = -1; struct sockaddr_in sa; - int local_ns, local_id; + int local_ns = -1, local_id = -1; #ifdef __UCLIBC_HAS_IPV6__ int v6; struct sockaddr_in6 sa6; @@ -689,12 +689,10 @@ int __dns_lookup(const char *name, int type, int nscount, char **nsip, /* Mess with globals while under lock */ LOCK; - local_ns = ns; + local_ns = ns % nscount; local_id = id; UNLOCK; - local_ns %= nscount; - while (retries < MAX_RETRIES) { if (fd != -1) close(fd); @@ -912,10 +910,12 @@ fail: free(packet); h_errno = NETDB_INTERNAL; /* Mess with globals while under lock */ - LOCK; - ns = local_ns; - id = local_id; - UNLOCK; + if (local_ns != -1) { + LOCK; + ns = local_ns; + id = local_id; + UNLOCK; + } return -1; } #endif |