diff options
author | "Steven J. Hill" <sjhill@realitydiluted.com> | 2005-06-03 03:19:48 +0000 |
---|---|---|
committer | "Steven J. Hill" <sjhill@realitydiluted.com> | 2005-06-03 03:19:48 +0000 |
commit | b972f78f0d58d9babfd27074a7207c42bf58df6c (patch) | |
tree | d48715202719c1255f8197292b0c2e6e1a9a5ad2 /libc/inet/resolv.c | |
parent | 26d0cf034b04c3a4f14ae6ead92006b1391af835 (diff) | |
download | uClibc-alpine-b972f78f0d58d9babfd27074a7207c42bf58df6c.tar.bz2 uClibc-alpine-b972f78f0d58d9babfd27074a7207c42bf58df6c.tar.xz |
Update structures and defines necessary to make resolver code thread
safe for TLS and NPTL. Our name resolver code is so out of date, we
made not be able to correctly utilize it in multi-threaded programs
compiled with NPTL.
Diffstat (limited to 'libc/inet/resolv.c')
-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 |