aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--sysdeps/pthread/aio_suspend.c14
2 files changed, 17 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index f14b70a..5399dcf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,10 @@
%sp not %fp in calculations.
(_JMPBUF_UNWINDS_ADJ): Likewise.
+ * sysdeps/pthread/aio_suspend.c (do_aio_misc_wait): New function.
+ (aio_suspend): Call it to force an exception region around the
+ AIO_MISC_WAIT() invocation.
+
2011-08-23 Andreas Schwab <schwab@redhat.com>
* sysdeps/i386/i686/multiarch/strspn.S (ENTRY): Add missing
diff --git a/sysdeps/pthread/aio_suspend.c b/sysdeps/pthread/aio_suspend.c
index b85b16d..99f3a80 100644
--- a/sysdeps/pthread/aio_suspend.c
+++ b/sysdeps/pthread/aio_suspend.c
@@ -92,6 +92,18 @@ cleanup (void *arg)
pthread_mutex_unlock (&__aio_requests_mutex);
}
+#ifdef DONT_NEED_AIO_MISC_COND
+static int
+__attribute__ ((noinline))
+do_aio_misc_wait(int *cntr, const struct timespec *timeout)
+{
+ int result = 0;
+
+ AIO_MISC_WAIT(result, *cntr, timeout, 1);
+
+ return result;
+}
+#endif
int
aio_suspend (list, nent, timeout)
@@ -169,7 +181,7 @@ aio_suspend (list, nent, timeout)
pthread_cleanup_push (cleanup, &clparam);
#ifdef DONT_NEED_AIO_MISC_COND
- AIO_MISC_WAIT (result, cntr, timeout, 1);
+ result = do_aio_misc_wait(&cntr, timeout);
#else
if (timeout == NULL)
result = pthread_cond_wait (&cond, &__aio_requests_mutex);