summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/inet/resolv.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c
index 27b60efea..695ee048b 100644
--- a/libc/inet/resolv.c
+++ b/libc/inet/resolv.c
@@ -1149,6 +1149,31 @@ void res_close( void )
return;
}
+/*
+ * NPTL - This code was taken from 'resolve/res_libc.c' and
+ * may still be incorrect. Our name resolver code is
+ * so out of date, we made not be able to correctly
+ * utilize it in multi-threaded programs.
+ */
+#ifdef IS_IN_libpthread
+
+/* This needs to be after the use of _res in res_init, above. */
+#undef _res
+
+/* The resolver state for use by single-threaded programs.
+ This differs from plain `struct __res_state _res;' in that it doesn't
+ create a common definition, but a plain symbol that resides in .bss,
+ which can have an alias. */
+struct __res_state _res __attribute__((section (".bss")));
+
+#if USE___THREAD
+#undef __resp
+__thread struct __res_state *__resp = &_res;
+extern __thread struct __res_state *__libc_resp
+ __attribute__ ((alias ("__resp"))) attribute_hidden;
+#endif
+#endif
+
#endif