about summary refs log tree commit diff
path: root/resolv/gai_misc.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
committerJakub Jelinek <jakub@redhat.com>2007-07-12 18:26:36 +0000
commit0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (patch)
tree2ea1f8305970753e4a657acb2ccc15ca3eec8e2c /resolv/gai_misc.c
parent7d58530341304d403a6626d7f7a1913165fe2f32 (diff)
downloadglibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.gz
glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.xz
glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.zip
2.5-18.1
Diffstat (limited to 'resolv/gai_misc.c')
-rw-r--r--resolv/gai_misc.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/resolv/gai_misc.c b/resolv/gai_misc.c
index b3334f38ef..2eec0f529d 100644
--- a/resolv/gai_misc.c
+++ b/resolv/gai_misc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -23,10 +23,31 @@
 #include <stdlib.h>
 #include <sys/time.h>
 
-#include "gai_misc.h"
+#include <gai_misc.h>
 
 
 
+#ifndef gai_create_helper_thread
+# define gai_create_helper_thread __gai_create_helper_thread
+
+extern inline int
+__gai_create_helper_thread (pthread_t *threadp, void *(*tf) (void *),
+			    void *arg)
+{
+  pthread_attr_t attr;
+
+  /* Make sure the thread is created detached.  */
+  pthread_attr_init (&attr);
+  pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+
+  int ret = pthread_create (threadp, &attr, tf, arg);
+
+  (void) pthread_attr_destroy (&attr);
+  return ret;
+}
+#endif
+
+
 /* Pool of request list entries.  */
 static struct requestlist **pool;
 
@@ -229,16 +250,11 @@ __gai_enqueue_request (struct gaicb *gaicbp)
   if (nthreads < optim.gai_threads && idle_thread_count == 0)
     {
       pthread_t thid;
-      pthread_attr_t attr;
 
       newp->running = 1;
 
-      /* Make sure the thread is created detached.  */
-      pthread_attr_init (&attr);
-      pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
-
       /* Now try to start a thread.  */
-      if (pthread_create (&thid, &attr, handle_requests, newp) == 0)
+      if (gai_create_helper_thread (&thid, handle_requests, newp) == 0)
 	/* We managed to enqueue the request.  All errors which can
 	   happen now can be recognized by calls to `gai_error'.  */
 	++nthreads;