summaryrefslogtreecommitdiff
path: root/src/network/__dns.c
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 /src/network/__dns.c
parentf96eb335e1ea050b781904d589bf8413131bee48 (diff)
downloadmusl-56ddcc720837522e0ff0199422284a7e69e5e891.tar.gz
musl-56ddcc720837522e0ff0199422284a7e69e5e891.tar.bz2
musl-56ddcc720837522e0ff0199422284a7e69e5e891.tar.xz
musl-56ddcc720837522e0ff0199422284a7e69e5e891.zip
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.
Diffstat (limited to 'src/network/__dns.c')
-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;