2002-07-30 Roland McGrath <roland@redhat.com>
authorroland <roland>
Fri, 2 Aug 2002 03:31:06 +0000 (03:31 +0000)
committerroland <roland>
Fri, 2 Aug 2002 03:31:06 +0000 (03:31 +0000)
* resolv/resolv.h (_res): Define macro unconditionally.
[! _LIBC_REENTRANT] (_res): Move this conditional decl to ...
* include/resolv.h: ... here.
[USE_TLS && HAVE___THREAD] (_res): #undef it and declare
as a __thread variable.
* resolv/res_libc.c [USE_TLS && HAVE___THREAD] (_res): Define it as
a __thread variable instead of a global.
* resolv/res_data.c [_LIBC]: Don't #undef _res.

include/resolv.h
resolv/res_data.c
resolv/res_libc.c
resolv/resolv.h

index d4a531f..6d7008b 100644 (file)
 #include <resolv/resolv.h>
 
 #ifdef _RESOLV_H_
+
+# ifdef _LIBC_REENTRANT
+#  include <tls.h>
+#  if USE_TLS && HAVE___THREAD
+#   undef _res
+extern __thread struct __res_state _res;
+#  endif
+# else
+#  ifndef __BIND_NOSTATIC
+extern struct __res_state _res;
+#  endif
+# endif
+
 /* Now define the internal interfaces.  */
 extern int __res_vinit (res_state, int);
 extern void _sethtent (int);
index 6aa697a..7488ba7 100644 (file)
@@ -39,8 +39,6 @@ static const char rcsid[] = "$BINDId: res_data.c,v 8.17 1999/10/13 17:11:31 vixi
 #include <string.h>
 #include <unistd.h>
 
-#undef _res
-
 const char *_res_opcodes[] = {
        "QUERY",
        "IQUERY",
@@ -71,9 +69,9 @@ const char *_res_sectioncodes[] = {
 
 #ifndef __BIND_NOSTATIC
 #ifdef _LIBC
-extern struct __res_state _res;
-#else
 /* The definition has been moved to res_libc.c.  */
+#else
+#undef _res
 struct __res_state _res
 # if defined(__BIND_RES_TEXT)
        = { RES_TIMEOUT, }      /* Motorola, et al. */
index c7561c9..9f9af1d 100644 (file)
 
 #undef _res
 
+#include <tls.h>
+
+#if USE_TLS && HAVE___THREAD
+/* With __thread support, this per-thread variable is used in all cases.  */
+__thread struct __res_state _res;
+#else
 /* The resolver state for use by single-threaded programs.  */
 struct __res_state _res;
+#endif
 
 /* This function is used to access the resolver state in
    single-threaded programs.  */
index 09bddb8..0804d24 100644 (file)
@@ -224,16 +224,10 @@ struct res_sym {
 /*                     0x00008000      */
 
 /* Things involving an internal (static) resolver context. */
-#if !defined _LIBC || defined _LIBC_REENTRANT
 __BEGIN_DECLS
 extern struct __res_state *__res_state(void) __attribute__ ((__const__));
 __END_DECLS
 #define _res (*__res_state())
-#else
-#ifndef __BIND_NOSTATIC
-extern struct __res_state _res;
-#endif
-#endif
 
 #ifndef __BIND_NOSTATIC
 #define fp_nquery              __fp_nquery