about summary refs log tree commit diff
path: root/src/network
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
parentf96eb335e1ea050b781904d589bf8413131bee48 (diff)
downloadmusl-56ddcc720837522e0ff0199422284a7e69e5e891.tar.gz
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')
-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;