diff options
Diffstat (limited to 'sysdeps/pthread')
-rw-r--r-- | sysdeps/pthread/aio_misc.c | 28 | ||||
-rw-r--r-- | sysdeps/pthread/aio_notify.c | 9 |
2 files changed, 28 insertions, 9 deletions
diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c index c2eb674212..1da3ad2c73 100644 --- a/sysdeps/pthread/aio_misc.c +++ b/sysdeps/pthread/aio_misc.c @@ -27,8 +27,27 @@ #include <unistd.h> #include <sys/stat.h> #include <sys/time.h> +#include <aio_misc.h> -#include "aio_misc.h" +#ifndef aio_create_helper_thread +# define aio_create_helper_thread __aio_create_helper_thread + +extern inline int +__aio_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 static void add_request_to_runlist (struct requestlist *newrequest); @@ -400,16 +419,11 @@ __aio_enqueue_request (aiocb_union *aiocbp, int operation) if (nthreads < optim.aio_threads && idle_thread_count == 0) { pthread_t thid; - pthread_attr_t attr; - - /* Make sure the thread is created detached. */ - pthread_attr_init (&attr); - pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); running = newp->running = allocated; /* Now try to start a thread. */ - if (pthread_create (&thid, &attr, handle_fildes_io, newp) == 0) + if (aio_create_helper_thread (&thid, handle_fildes_io, newp) == 0) /* We managed to enqueue the request. All errors which can happen now can be recognized by calls to `aio_return' and `aio_error'. */ diff --git a/sysdeps/pthread/aio_notify.c b/sysdeps/pthread/aio_notify.c index d1c0a63fbf..877e8d9363 100644 --- a/sysdeps/pthread/aio_notify.c +++ b/sysdeps/pthread/aio_notify.c @@ -1,5 +1,6 @@ /* Notify initiator of AIO request. - Copyright (C) 1997,98,99,2000,2001,2003 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -22,8 +23,11 @@ #include <pthread.h> #include <stdlib.h> #include <unistd.h> -#include "aio_misc.h" +#include <aio_misc.h> +#ifndef aio_start_notify_thread +# define aio_start_notify_thread() do { } while (0) +#endif struct notify_func { @@ -34,6 +38,7 @@ struct notify_func static void * notify_func_wrapper (void *arg) { + aio_start_notify_thread (); struct notify_func *const n = arg; void (*func) (sigval_t) = n->func; sigval_t value = n->value; |