summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-02-23 13:07:20 -0500
committerRich Felker <dalias@aerifal.cx>2012-02-23 13:07:20 -0500
commit56ddcc720837522e0ff0199422284a7e69e5e891 (patch)
tree1c33390fc34395e0509a5568ea41c3f9671e6a80
parentf96eb335e1ea050b781904d589bf8413131bee48 (diff)
fix for previous incorrect fix of cancellation in dns lookups
uninitialized file descriptor was being closed on return, causing stdin to be closed in many cases.
-rw-r--r--src/network/__dns.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/network/__dns.c b/src/network/__dns.c
index 0d4f47e0..786c054a 100644
--- a/src/network/__dns.c
+++ b/src/network/__dns.c
@@ -89,12 +89,13 @@ int __dns_doqueries(unsigned char *dest, const char *name, int *rr, int rrcnt)
sl = sizeof sa.sin;
}
- pthread_cleanup_push(cleanup, (void *)(intptr_t)fd);
- pthread_setcancelstate(cs, 0);
-
/* Get local address and open/bind a socket */
sa.sin.sin_family = family;
fd = socket(family, SOCK_DGRAM, 0);
+
+ pthread_cleanup_push(cleanup, (void *)(intptr_t)fd);
+ pthread_setcancelstate(cs, 0);
+
if (bind(fd, (void *)&sa, sl) < 0) {
errcode = EAI_SYSTEM;
goto out;