From b43b13ac2544b11f35be301d1589b51a8473e32b Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 4 Dec 1999 18:05:55 +0000 Subject: Update. 1999-12-03 Andreas Jaeger * nss/getXXbyYY.c: Include (FUNCTION_NAME): Use res_ninit instead of res_init. * nss/getXXbyYY_r.c [NEED__RES]: Include for _res declaration and prototypes. Remove extra _res declaration. (INTERNAL): Use thread aware res_ninit function. * inet/gethstbyad_r.c: Include . * resolv/res_data.c: Update from Bind 8.2.2-P5. Moved res_init to res_libc.c. Disabled unneeded functions. * resolv/res_libc.c: New file. * Versions.def: Add version GLIBC_2.2 for libpthread. Add versions GLIBC_2.1 and GLIBC_2.2 for libresolv. * include/resolv.h: Add internal interfaces. * resolv/Makefile (routines): Add new files. (libresolv-routines): Likewise. (distribute): Likewise. * resolv/gethnamaddr.c: Use thread safe resolver functions. * resolv/nss_dns/dns-host.c: Likewise. * resolv/nss_dns/dns-network.c: Likewise. * resolv/arpa/nameser.h: Update from Bind 8.2.2-P5. * resolv/nsap_addr.c: Likewise. * resolv/res_comp.c: Likewise. * resolv/res_debug.c: Likewise. * resolv/res_init.c: Likewise. * resolv/res_mkquery.c: Likewise. * resolv/res_query.c: Likewise. * resolv/res_send.c: Likewise. * resolv/resolv.h: Likewise. * resolv/Versions: Add __res_state and __res_ninit with version GLIBC_2.2 to libc. Add new interfaces with version GLIBC_2.2 to libresolv. * resolv/Banner: Update. * include/arpa/nameser_compat.h: New file. * resolv/ns_name.c: New file from Bind 8.2.2-P5. * resolv/ns_netint.c: Likewise. * resolv/ns_parse.c: Likewise. * resolv/ns_print.c: Likewise. * resolv/ns_samedomain.c: Likewise. * resolv/ns_ttl.c: Likewise. * resolv/arpa/nameser_compat.h: Likewise. * resolv/res_debug.h: Likewise. Some patches are based on work done by Adam D. Bradley . * sysdeps/unix/sysv/linux/configure.in: Remove check for ldconfig, set always use_ldconfig instead. --- linuxthreads/ChangeLog | 15 +++++++++++++++ linuxthreads/Versions | 3 +++ linuxthreads/errno.c | 7 +++++++ linuxthreads/internals.h | 7 ++++++- linuxthreads/manager.c | 1 + linuxthreads/pthread.c | 3 +++ 6 files changed, 35 insertions(+), 1 deletion(-) (limited to 'linuxthreads') diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 522bea2..7d161b8 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,18 @@ +1999-12-03 Andreas Jaeger + + * Versions: Add __res_state with version GLIBC_2.2. + + * errno.c (__res_state): New function to return thread specific + resolver state. + + * pthread.c (pthread_initialize): Initialize p_resp. + (__pthread_reset_main_thread): Also set p_resp. + + * manager.c (pthread_handle_create): Initialize p_resp. + + * internals.h: Add thread specific resolver state. + Based on patches by Adam D. Bradley . + 1999-12-01 Ulrich Drepper * sysdeps/i386/pt-machine.h: Move stack_pointer definition to the diff --git a/linuxthreads/Versions b/linuxthreads/Versions index c0ec792..ab4dce5 100644 --- a/linuxthreads/Versions +++ b/linuxthreads/Versions @@ -118,4 +118,7 @@ libpthread { __pthread_kill_other_threads_np; __vfork; } + GLIBC_2.2 { + __res_state; + } } diff --git a/linuxthreads/errno.c b/linuxthreads/errno.c index 7464748..bd9584f 100644 --- a/linuxthreads/errno.c +++ b/linuxthreads/errno.c @@ -30,3 +30,10 @@ int * __h_errno_location() pthread_descr self = thread_self(); return THREAD_GETMEM (self, p_h_errnop); } + +/* Return thread specific resolver state. */ +struct __res_state * __res_state() +{ + pthread_descr self = thread_self(); + return THREAD_GETMEM (self, p_resp); +} diff --git a/linuxthreads/internals.h b/linuxthreads/internals.h index cd9091b..2e4b4b7 100644 --- a/linuxthreads/internals.h +++ b/linuxthreads/internals.h @@ -26,6 +26,9 @@ #include #include /* for _LIBC_TSD_KEY_N */ +#include /* for per-thread resolver context */ + + #include "pt-machine.h" #include "semaphore.h" #include "../linuxthreads_db/thread_dbP.h" @@ -119,9 +122,11 @@ struct _pthread_descr_struct { size_t p_guardsize; /* size of guard area */ pthread_descr p_self; /* Pointer to this structure */ int p_nr; /* Index of descriptor in __pthread_handles */ - /* New elements must be added at the end. */ int p_report_events; /* Nonzero if events must be reported. */ td_eventbuf_t p_eventbuf; /* Data for event. */ + struct __res_state *p_resp; /* Pointer to resolver state */ + struct __res_state p_res; /* per-thread resolver state */ + /* New elements must be added at the end. */ } __attribute__ ((aligned(32))); /* We need to align the structure so that doubles are aligned properly. This is 8 bytes on MIPS and 16 bytes on MIPS64. diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c index 6fced74..307ce63 100644 --- a/linuxthreads/manager.c +++ b/linuxthreads/manager.c @@ -384,6 +384,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, new_thread->p_canceltype = PTHREAD_CANCEL_DEFERRED; new_thread->p_errnop = &new_thread->p_errno; new_thread->p_h_errnop = &new_thread->p_h_errno; + new_thread->p_resp = &new_thread->p_res; new_thread->p_guardaddr = guardaddr; new_thread->p_guardsize = guardsize; new_thread->p_self = new_thread; diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index bddec8c..41d09a8 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -318,6 +318,8 @@ static void pthread_initialize(void) /* The errno/h_errno variable of the main thread are the global ones. */ __pthread_initial_thread.p_errnop = &_errno; __pthread_initial_thread.p_h_errnop = &_h_errno; + /* Likewise for the resolver state _res. */ + __pthread_initial_thread.p_resp = &_res; #ifdef __SIGRTMIN /* Initialize real-time signals. */ init_rtsigs (); @@ -725,6 +727,7 @@ void __pthread_reset_main_thread() /* Now this thread modifies the global variables. */ THREAD_SETMEM(self, p_errnop, &_errno); THREAD_SETMEM(self, p_h_errnop, &_h_errno); + THREAD_SETMEM(self, p_resp, &_res); } /* Process-wide exec() request */ -- cgit v1.1