aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/pthread
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/pthread')
-rw-r--r--sysdeps/pthread/aio_misc.c28
-rw-r--r--sysdeps/pthread/aio_notify.c9
2 files changed, 28 insertions, 9 deletions
diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c
index c2eb674..1da3ad2 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 d1c0a63..877e8d9 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;