1#include <sys/cdefs.h> |
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; |
121 if (pthread_mutex_lock(&keylock) == 0) { 122 _mtctxres_init(); 123 (void) pthread_mutex_unlock(&keylock); 124 } |
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} |