2003-02-23  Ulrich Drepper  <drepper@redhat.com>

	* resolv/res_libc.c [USE___THREAD] (_res): Initialize _vcsock
	element to -1.
This commit is contained in:
Ulrich Drepper 2003-02-23 09:16:11 +00:00
parent b1b8e747d4
commit fd1a0d0c7c
5 changed files with 40 additions and 26 deletions

View File

@ -1,3 +1,8 @@
2003-02-23 Ulrich Drepper <drepper@redhat.com>
* resolv/res_libc.c [USE___THREAD] (_res): Initialize _vcsock
element to -1.
2003-02-22 Ulrich Drepper <drepper@redhat.com> 2003-02-22 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/dl-sysdep.c: Avoid warning. * sysdeps/generic/dl-sysdep.c: Avoid warning.

View File

@ -1,3 +1,10 @@
2003-02-23 Ulrich Drepper <drepper@redhat.com>
* pthread_create.c (start_thread): Set EXITING_BIT early.
* sysdeps/i386/tls.h (THREAD_GETMEM): Mark asm as volatile.
(THREAD_GETMEM_NC): Likewise.
2003-02-22 Ulrich Drepper <drepper@redhat.com> 2003-02-22 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Shave * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Shave

View File

@ -228,6 +228,9 @@ start_thread (void *arg)
pd->result = pd->start_routine (pd->arg); pd->result = pd->start_routine (pd->arg);
} }
/* The thread is exiting now. */
atomic_bit_set (&pd->cancelhandling, EXITING_BIT);
/* Clean up any state libc stored in thread-local variables. */ /* Clean up any state libc stored in thread-local variables. */
__libc_thread_freeres (); __libc_thread_freeres ();
@ -267,9 +270,6 @@ start_thread (void *arg)
} }
/* The thread is exiting now. */
atomic_bit_set (&pd->cancelhandling, EXITING_BIT);
/* If the thread is detached free the TCB. */ /* If the thread is detached free the TCB. */
if (IS_DETACHED (pd)) if (IS_DETACHED (pd))
/* Free the TCB. */ /* Free the TCB. */

View File

@ -247,13 +247,13 @@ union user_desc_init
# define THREAD_GETMEM(descr, member) \ # define THREAD_GETMEM(descr, member) \
({ __typeof (descr->member) __value; \ ({ __typeof (descr->member) __value; \
if (sizeof (__value) == 1) \ if (sizeof (__value) == 1) \
asm ("movb %%gs:%P2,%b0" \ asm volatile ("movb %%gs:%P2,%b0" \
: "=q" (__value) \ : "=q" (__value) \
: "0" (0), "i" (offsetof (struct pthread, member))); \ : "0" (0), "i" (offsetof (struct pthread, member))); \
else if (sizeof (__value) == 4) \ else if (sizeof (__value) == 4) \
asm ("movl %%gs:%P1,%0" \ asm volatile ("movl %%gs:%P1,%0" \
: "=r" (__value) \ : "=r" (__value) \
: "i" (offsetof (struct pthread, member))); \ : "i" (offsetof (struct pthread, member))); \
else \ else \
{ \ { \
if (sizeof (__value) != 8) \ if (sizeof (__value) != 8) \
@ -261,11 +261,11 @@ union user_desc_init
4 or 8. */ \ 4 or 8. */ \
abort (); \ abort (); \
\ \
asm ("movl %%gs:%P1,%%eax\n\t" \ asm volatile ("movl %%gs:%P1,%%eax\n\t" \
"movl %%gs:%P2,%%edx" \ "movl %%gs:%P2,%%edx" \
: "=A" (__value) \ : "=A" (__value) \
: "i" (offsetof (struct pthread, member)), \ : "i" (offsetof (struct pthread, member)), \
"i" (offsetof (struct pthread, member) + 4)); \ "i" (offsetof (struct pthread, member) + 4)); \
} \ } \
__value; }) __value; })
@ -274,14 +274,15 @@ union user_desc_init
# define THREAD_GETMEM_NC(descr, member, idx) \ # define THREAD_GETMEM_NC(descr, member, idx) \
({ __typeof (descr->member[0]) __value; \ ({ __typeof (descr->member[0]) __value; \
if (sizeof (__value) == 1) \ if (sizeof (__value) == 1) \
asm ("movb %%gs:%P2(%3),%b0" \ asm volatile ("movb %%gs:%P2(%3),%b0" \
: "=q" (__value) \ : "=q" (__value) \
: "0" (0), "i" (offsetof (struct pthread, member[0])), \ : "0" (0), "i" (offsetof (struct pthread, member[0])), \
"r" (idx)); \ "r" (idx)); \
else if (sizeof (__value) == 4) \ else if (sizeof (__value) == 4) \
asm ("movl %%gs:%P1(,%2,4),%0" \ asm volatile ("movl %%gs:%P1(,%2,4),%0" \
: "=r" (__value) \ : "=r" (__value) \
: "i" (offsetof (struct pthread, member[0])), "r" (idx)); \ : "i" (offsetof (struct pthread, member[0])), \
"r" (idx)); \
else \ else \
{ \ { \
if (sizeof (__value) != 8) \ if (sizeof (__value) != 8) \
@ -289,10 +290,11 @@ union user_desc_init
4 or 8. */ \ 4 or 8. */ \
abort (); \ abort (); \
\ \
asm ("movl %%gs:%P1(,%2,8),%%eax\n\t" \ asm volatile ("movl %%gs:%P1(,%2,8),%%eax\n\t" \
"movl %%gs:4+%P1(,%2,8),%%edx" \ "movl %%gs:4+%P1(,%2,8),%%edx" \
: "=&A" (__value) \ : "=&A" (__value) \
: "i" (offsetof (struct pthread, member[0])), "r" (idx)); \ : "i" (offsetof (struct pthread, member[0])), \
"r" (idx)); \
} \ } \
__value; }) __value; })

View File

@ -72,7 +72,7 @@ res_init(void) {
#if USE___THREAD #if USE___THREAD
/* With __thread support, this per-thread variable is used in all cases. */ /* With __thread support, this per-thread variable is used in all cases. */
__thread struct __res_state _res; __thread struct __res_state _res = { ._vcsock = -1 };
extern __thread struct __res_state __libc_res __attribute__ ((alias ("_res"))) extern __thread struct __res_state __libc_res __attribute__ ((alias ("_res")))
attribute_hidden; attribute_hidden;
# define _res __libc_res # define _res __libc_res