mtctxres.c (156956) | mtctxres.c (165258) |
---|---|
1#include <sys/cdefs.h> | 1#include <sys/cdefs.h> |
2__FBSDID("$FreeBSD: head/lib/libc/resolv/mtctxres.c 156956 2006-03-21 15:37:16Z ume $"); | 2__FBSDID("$FreeBSD: head/lib/libc/resolv/mtctxres.c 165258 2006-12-15 20:59:55Z ume $"); |
3 4#include <port_before.h> 5#ifdef DO_PTHREADS 6#include <pthread.h> 7#ifdef _LIBC 8#include <pthread_np.h> 9#endif 10#endif --- 102 unchanged lines hidden (view full) --- 113 114 /* 115 * This if clause should only be executed if we are linking 116 * statically. When linked dynamically _mtctxres_init() should 117 * be called at binding time due the #pragma above. 118 */ 119 if (!mt_key_initialized) { 120 static pthread_mutex_t keylock = PTHREAD_MUTEX_INITIALIZER; | 3 4#include <port_before.h> 5#ifdef DO_PTHREADS 6#include <pthread.h> 7#ifdef _LIBC 8#include <pthread_np.h> 9#endif 10#endif --- 102 unchanged lines hidden (view full) --- 113 114 /* 115 * This if clause should only be executed if we are linking 116 * statically. When linked dynamically _mtctxres_init() should 117 * be called at binding time due the #pragma above. 118 */ 119 if (!mt_key_initialized) { 120 static pthread_mutex_t keylock = PTHREAD_MUTEX_INITIALIZER; |
121 pthread_mutex_lock(&keylock); 122 _mtctxres_init(); 123 pthread_mutex_unlock(&keylock); | 121 if (pthread_mutex_lock(&keylock) == 0) { 122 _mtctxres_init(); 123 (void) pthread_mutex_unlock(&keylock); 124 } |
124 } 125 126 /* 127 * If we have already been called in this thread return the existing 128 * context. Otherwise recreat a new context and return it. If 129 * that fails return a global context. 130 */ 131 if (mt_key_initialized) { 132 if (((mt = pthread_getspecific(key)) != 0) || 133 (__res_init_ctx() == 0 && 134 (mt = pthread_getspecific(key)) != 0)) { 135 return (mt); 136 } 137 } 138#endif 139 return (&sharedctx); 140} | 125 } 126 127 /* 128 * If we have already been called in this thread return the existing 129 * context. Otherwise recreat a new context and return it. If 130 * that fails return a global context. 131 */ 132 if (mt_key_initialized) { 133 if (((mt = pthread_getspecific(key)) != 0) || 134 (__res_init_ctx() == 0 && 135 (mt = pthread_getspecific(key)) != 0)) { 136 return (mt); 137 } 138 } 139#endif 140 return (&sharedctx); 141} |