summaryrefslogtreecommitdiff
path: root/rt
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-01-03 23:19:03 +0000
committerUlrich Drepper <drepper@redhat.com>2006-01-03 23:19:03 +0000
commit6d3aff23e2c64b64fe68fe88360185e17b3e936a (patch)
tree47755ce70732719bd318f1203454e287f8805d5d /rt
parent1c50f6b6602a07f052249c6fe6dbab48357b68bd (diff)
lio_listio should emit an event for each individual request in
addition to the global event. * sysdeps/pthread/lio_listio.c (lio_listio): Renamed to lio_listio_internal. Remove mode parameter check. Only set sigevent type ti SIGEV_NONE if LIO_NO_INDIVIDUAL_EVENT is set. (__lio_listio_21): New function. Compatiblity version which sets LIO_NO_INDIVIDUAL_EVENT before calling lio_listio_internal. (__lio_listio_item_notify): New function. * sysdeps/pthread/lio_listio64.c: Define __lio_listio_21 and __lio_listio_item_notify macros. * sysdeps/pthread/Versions: New file. * rt/tst-aio2.c: Adjust test for new semantics of lio_listio. * include/aio.h: Define LIO_NO_INDIVIDUAL_EVENT. * Versions.def: Add GLIBC_2.4 for librt. * rt/Versions: Whitespace fix. * sysdeps/pthread/aio_misc.c: Likewise.
Diffstat (limited to 'rt')
-rw-r--r--rt/Versions2
-rw-r--r--rt/tst-aio2.c25
2 files changed, 21 insertions, 6 deletions
diff --git a/rt/Versions b/rt/Versions
index a7d633d0ea..51bb033ec9 100644
--- a/rt/Versions
+++ b/rt/Versions
@@ -19,7 +19,7 @@ librt {
}
GLIBC_2.3.4 {
# m*
- mq_open; mq_close; mq_unlink; mq_getattr; mq_setattr;
+ mq_open; mq_close; mq_unlink; mq_getattr; mq_setattr;
mq_notify; mq_send; mq_receive; mq_timedsend; mq_timedreceive;
}
}
diff --git a/rt/tst-aio2.c b/rt/tst-aio2.c
index 1ff92ce93b..79076396a4 100644
--- a/rt/tst-aio2.c
+++ b/rt/tst-aio2.c
@@ -1,5 +1,5 @@
/* Test for notification mechanism in lio_listio.
- Copyright (C) 2000,02 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2002, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
@@ -25,13 +25,19 @@
#include <unistd.h>
#include <errno.h>
-int flag;
+
+static pthread_barrier_t b;
static void
thrfct (sigval_t arg)
{
- flag = 1;
+ int e = pthread_barrier_wait (&b);
+ if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
+ {
+ puts ("thread: barrier_wait failed");
+ exit (1);
+ }
}
@@ -53,6 +59,12 @@ do_test (int argc, char *argv[])
unlink (name);
+ if (pthread_barrier_init (&b, NULL, 2) != 0)
+ {
+ puts ("barrier_init failed");
+ return 1;
+ }
+
arr[0] = &cb;
cb.aio_fildes = fd;
@@ -77,9 +89,12 @@ do_test (int argc, char *argv[])
return 1;
}
- if (flag != 0)
+ puts ("lio_listio returned");
+
+ int e = pthread_barrier_wait (&b);
+ if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
{
- puts ("thread created, should not have happened");
+ puts ("barrier_wait failed");
return 1;
}