diff options
Diffstat (limited to 'libc')
-rw-r--r-- | libc/inet/resolv.c | 25 |
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 |