summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/inet/resolv.c16
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