summaryrefslogtreecommitdiff
path: root/test/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'test/nptl')
-rw-r--r--test/nptl/Makefile8
-rw-r--r--test/nptl/Makefile.in242
-rw-r--r--test/nptl/eintr.c88
-rw-r--r--test/nptl/tst-align.c70
-rw-r--r--test/nptl/tst-align2.c86
-rw-r--r--test/nptl/tst-align3.c56
-rw-r--r--test/nptl/tst-atfork1.c120
-rw-r--r--test/nptl/tst-atfork2.c156
-rw-r--r--test/nptl/tst-atfork2mod.c57
-rw-r--r--test/nptl/tst-attr1.c305
-rw-r--r--test/nptl/tst-attr2.c316
-rw-r--r--test/nptl/tst-attr3.c419
-rw-r--r--test/nptl/tst-barrier1.c70
-rw-r--r--test/nptl/tst-barrier2.c184
-rw-r--r--test/nptl/tst-barrier3.c153
-rw-r--r--test/nptl/tst-barrier4.c121
-rw-r--r--test/nptl/tst-basic1.c81
-rw-r--r--test/nptl/tst-basic2.c120
-rw-r--r--test/nptl/tst-basic3.c86
-rw-r--r--test/nptl/tst-basic4.c100
-rw-r--r--test/nptl/tst-basic5.c73
-rw-r--r--test/nptl/tst-basic6.c131
-rw-r--r--test/nptl/tst-basic7.c75
-rw-r--r--test/nptl/tst-cancel1.c162
-rw-r--r--test/nptl/tst-cancel10.c125
-rw-r--r--test/nptl/tst-cancel11.c122
-rw-r--r--test/nptl/tst-cancel12.c126
-rw-r--r--test/nptl/tst-cancel13.c128
-rw-r--r--test/nptl/tst-cancel14.c136
-rw-r--r--test/nptl/tst-cancel15.c141
-rw-r--r--test/nptl/tst-cancel16.c230
-rw-r--r--test/nptl/tst-cancel18.c173
-rw-r--r--test/nptl/tst-cancel19.c286
-rw-r--r--test/nptl/tst-cancel2.c99
-rw-r--r--test/nptl/tst-cancel20.c263
-rw-r--r--test/nptl/tst-cancel21.c293
-rw-r--r--test/nptl/tst-cancel22.c121
-rw-r--r--test/nptl/tst-cancel23.c1
-rw-r--r--test/nptl/tst-cancel25.c171
-rw-r--r--test/nptl/tst-cancel3.c97
-rw-r--r--test/nptl/tst-cancel4.c2393
-rw-r--r--test/nptl/tst-cancel5.c1
-rw-r--r--test/nptl/tst-cancel6.c78
-rw-r--r--test/nptl/tst-cancel7.c208
-rw-r--r--test/nptl/tst-cancel8.c142
-rw-r--r--test/nptl/tst-cancel9.c125
-rw-r--r--test/nptl/tst-cancelx10.c1
-rw-r--r--test/nptl/tst-cancelx11.c1
-rw-r--r--test/nptl/tst-cancelx12.c1
-rw-r--r--test/nptl/tst-cancelx13.c1
-rw-r--r--test/nptl/tst-cancelx14.c1
-rw-r--r--test/nptl/tst-cancelx15.c1
-rw-r--r--test/nptl/tst-cancelx16.c1
-rw-r--r--test/nptl/tst-cancelx18.c1
-rw-r--r--test/nptl/tst-cancelx2.c1
-rw-r--r--test/nptl/tst-cancelx20.c1
-rw-r--r--test/nptl/tst-cancelx21.c1
-rw-r--r--test/nptl/tst-cancelx3.c1
-rw-r--r--test/nptl/tst-cancelx4.c1
-rw-r--r--test/nptl/tst-cancelx6.c1
-rw-r--r--test/nptl/tst-cancelx7.c1
-rw-r--r--test/nptl/tst-cancelx8.c1
-rw-r--r--test/nptl/tst-cancelx9.c1
-rw-r--r--test/nptl/tst-cleanup0.c75
-rw-r--r--test/nptl/tst-cleanup1.c99
-rw-r--r--test/nptl/tst-cleanup2.c62
-rw-r--r--test/nptl/tst-cleanup3.c97
-rw-r--r--test/nptl/tst-cleanup4.c197
-rw-r--r--test/nptl/tst-cleanup4aux.c120
-rw-r--r--test/nptl/tst-cleanupx0.c1
-rw-r--r--test/nptl/tst-cleanupx1.c1
-rw-r--r--test/nptl/tst-cleanupx2.c1
-rw-r--r--test/nptl/tst-cleanupx3.c1
-rw-r--r--test/nptl/tst-cleanupx4.c1
-rw-r--r--test/nptl/tst-clock.c123
-rw-r--r--test/nptl/tst-clock1.c50
-rw-r--r--test/nptl/tst-clock2.c201
-rw-r--r--test/nptl/tst-clock_nanosleep.c57
-rw-r--r--test/nptl/tst-cond-deadlock.c51
-rw-r--r--test/nptl/tst-cond1.c93
-rw-r--r--test/nptl/tst-cond10.c172
-rw-r--r--test/nptl/tst-cond11.c190
-rw-r--r--test/nptl/tst-cond12.c195
-rw-r--r--test/nptl/tst-cond13.c2
-rw-r--r--test/nptl/tst-cond14.c117
-rw-r--r--test/nptl/tst-cond15.c159
-rw-r--r--test/nptl/tst-cond16.c104
-rw-r--r--test/nptl/tst-cond17.c2
-rw-r--r--test/nptl/tst-cond18.c116
-rw-r--r--test/nptl/tst-cond19.c75
-rw-r--r--test/nptl/tst-cond2.c162
-rw-r--r--test/nptl/tst-cond20.c169
-rw-r--r--test/nptl/tst-cond21.c3
-rw-r--r--test/nptl/tst-cond22.c160
-rw-r--r--test/nptl/tst-cond23.c183
-rw-r--r--test/nptl/tst-cond3.c112
-rw-r--r--test/nptl/tst-cond4.c263
-rw-r--r--test/nptl/tst-cond5.c105
-rw-r--r--test/nptl/tst-cond6.c233
-rw-r--r--test/nptl/tst-cond7.c167
-rw-r--r--test/nptl/tst-cond8.c276
-rw-r--r--test/nptl/tst-cond9.c149
-rw-r--r--test/nptl/tst-cpuclock1.c306
-rw-r--r--test/nptl/tst-cpuclock2.c331
-rw-r--r--test/nptl/tst-cputimer1.c68
-rw-r--r--test/nptl/tst-cputimer2.c83
-rw-r--r--test/nptl/tst-cputimer3.c130
-rw-r--r--test/nptl/tst-detach1.c55
-rw-r--r--test/nptl/tst-dlsym1.c66
-rw-r--r--test/nptl/tst-eintr1.c104
-rw-r--r--test/nptl/tst-eintr2.c117
-rw-r--r--test/nptl/tst-eintr3.c71
-rw-r--r--test/nptl/tst-eintr4.c55
-rw-r--r--test/nptl/tst-eintr5.c80
-rw-r--r--test/nptl/tst-exec2.c153
-rw-r--r--test/nptl/tst-exec3.c151
-rw-r--r--test/nptl/tst-exec4.c115
-rw-r--r--test/nptl/tst-exit1.c78
-rw-r--r--test/nptl/tst-exit2.c40
-rw-r--r--test/nptl/tst-exit3.c81
-rw-r--r--test/nptl/tst-fini1.c34
-rw-r--r--test/nptl/tst-fini1mod.c71
-rw-r--r--test/nptl/tst-flock1.c92
-rw-r--r--test/nptl/tst-flock2.c259
-rw-r--r--test/nptl/tst-fork1.c119
-rw-r--r--test/nptl/tst-fork2.c89
-rw-r--r--test/nptl/tst-fork3.c106
-rw-r--r--test/nptl/tst-fork4.c64
-rw-r--r--test/nptl/tst-getpid1.c122
-rw-r--r--test/nptl/tst-getpid2.c2
-rw-r--r--test/nptl/tst-getpid3.c114
-rw-r--r--test/nptl/tst-initializers1-c89.c1
-rw-r--r--test/nptl/tst-initializers1-c99.c1
-rw-r--r--test/nptl/tst-initializers1-gnu89.c1
-rw-r--r--test/nptl/tst-initializers1-gnu99.c1
-rw-r--r--test/nptl/tst-initializers1.c47
-rw-r--r--test/nptl/tst-join1.c82
-rw-r--r--test/nptl/tst-join2.c103
-rw-r--r--test/nptl/tst-join3.c122
-rw-r--r--test/nptl/tst-join4.c124
-rw-r--r--test/nptl/tst-join5.c142
-rw-r--r--test/nptl/tst-join6.c2
-rw-r--r--test/nptl/tst-key1.c88
-rw-r--r--test/nptl/tst-key2.c114
-rw-r--r--test/nptl/tst-key3.c155
-rw-r--r--test/nptl/tst-key4.c136
-rw-r--r--test/nptl/tst-kill1.c99
-rw-r--r--test/nptl/tst-kill2.c138
-rw-r--r--test/nptl/tst-kill3.c158
-rw-r--r--test/nptl/tst-kill4.c73
-rw-r--r--test/nptl/tst-kill5.c48
-rw-r--r--test/nptl/tst-kill6.c161
-rw-r--r--test/nptl/tst-mqueue.h83
-rw-r--r--test/nptl/tst-mqueue1.c416
-rw-r--r--test/nptl/tst-mqueue2.c476
-rw-r--r--test/nptl/tst-mqueue3.c243
-rw-r--r--test/nptl/tst-mqueue4.c287
-rw-r--r--test/nptl/tst-mqueue5.c1013
-rw-r--r--test/nptl/tst-mqueue6.c304
-rw-r--r--test/nptl/tst-mqueue7.c108
-rw-r--r--test/nptl/tst-mqueue8.c265
-rw-r--r--test/nptl/tst-mqueue9.c91
-rw-r--r--test/nptl/tst-mutex1.c56
-rw-r--r--test/nptl/tst-mutex2.c222
-rw-r--r--test/nptl/tst-mutex3.c224
-rw-r--r--test/nptl/tst-mutex4.c190
-rw-r--r--test/nptl/tst-mutex5.c185
-rw-r--r--test/nptl/tst-mutex5a.c2
-rw-r--r--test/nptl/tst-mutex6.c54
-rw-r--r--test/nptl/tst-mutex7.c120
-rw-r--r--test/nptl/tst-mutex7a.c2
-rw-r--r--test/nptl/tst-mutex8.c366
-rw-r--r--test/nptl/tst-mutex9.c190
-rw-r--r--test/nptl/tst-oddstacklimit.c1
-rw-r--r--test/nptl/tst-once1.c50
-rw-r--r--test/nptl/tst-once2.c103
-rw-r--r--test/nptl/tst-once3.c161
-rw-r--r--test/nptl/tst-once4.c201
-rw-r--r--test/nptl/tst-oncex3.c1
-rw-r--r--test/nptl/tst-oncex4.c1
-rw-r--r--test/nptl/tst-popen1.c59
-rw-r--r--test/nptl/tst-raise1.c61
-rw-r--r--test/nptl/tst-rwlock1.c116
-rw-r--r--test/nptl/tst-rwlock10.c20
-rw-r--r--test/nptl/tst-rwlock11.c20
-rw-r--r--test/nptl/tst-rwlock12.c207
-rw-r--r--test/nptl/tst-rwlock13.c70
-rw-r--r--test/nptl/tst-rwlock14.c168
-rw-r--r--test/nptl/tst-rwlock2.c142
-rw-r--r--test/nptl/tst-rwlock2a.c2
-rw-r--r--test/nptl/tst-rwlock3.c92
-rw-r--r--test/nptl/tst-rwlock4.c189
-rw-r--r--test/nptl/tst-rwlock5.c86
-rw-r--r--test/nptl/tst-rwlock6.c225
-rw-r--r--test/nptl/tst-rwlock7.c178
-rw-r--r--test/nptl/tst-rwlock8.c163
-rw-r--r--test/nptl/tst-rwlock9.c202
-rw-r--r--test/nptl/tst-sched1.c97
-rw-r--r--test/nptl/tst-sem1.c88
-rw-r--r--test/nptl/tst-sem10.c87
-rw-r--r--test/nptl/tst-sem11.c76
-rw-r--r--test/nptl/tst-sem12.c14
-rw-r--r--test/nptl/tst-sem2.c53
-rw-r--r--test/nptl/tst-sem3.c144
-rw-r--r--test/nptl/tst-sem4.c149
-rw-r--r--test/nptl/tst-sem5.c79
-rw-r--r--test/nptl/tst-sem6.c80
-rw-r--r--test/nptl/tst-sem7.c108
-rw-r--r--test/nptl/tst-sem8.c73
-rw-r--r--test/nptl/tst-sem9.c80
-rw-r--r--test/nptl/tst-signal1.c188
-rw-r--r--test/nptl/tst-signal2.c197
-rw-r--r--test/nptl/tst-signal3.c260
-rw-r--r--test/nptl/tst-signal4.c59
-rw-r--r--test/nptl/tst-signal5.c110
-rw-r--r--test/nptl/tst-signal6.c191
-rw-r--r--test/nptl/tst-signal7.c58
-rw-r--r--test/nptl/tst-spin1.c56
-rw-r--r--test/nptl/tst-spin2.c158
-rw-r--r--test/nptl/tst-spin3.c54
-rw-r--r--test/nptl/tst-stack-align.h34
-rw-r--r--test/nptl/tst-stack1.c145
-rw-r--r--test/nptl/tst-stack2.c79
-rw-r--r--test/nptl/tst-stdio1.c56
-rw-r--r--test/nptl/tst-stdio2.c81
-rw-r--r--test/nptl/tst-sysconf.c47
-rw-r--r--test/nptl/tst-timer2.c65
-rw-r--r--test/nptl/tst-timer3.c86
-rw-r--r--test/nptl/tst-timer4.c647
-rw-r--r--test/nptl/tst-timer5.c38
-rw-r--r--test/nptl/tst-tls1.c121
-rw-r--r--test/nptl/tst-tls2.c215
-rw-r--r--test/nptl/tst-tls3.c224
-rw-r--r--test/nptl/tst-tls3mod.c105
-rw-r--r--test/nptl/tst-tls4.c190
-rw-r--r--test/nptl/tst-tls4moda.c55
-rw-r--r--test/nptl/tst-tls4modb.c64
-rw-r--r--test/nptl/tst-tls5.c118
-rw-r--r--test/nptl/tst-tls5.h28
-rw-r--r--test/nptl/tst-tls5mod.c6
-rw-r--r--test/nptl/tst-tls5moda.c6
-rw-r--r--test/nptl/tst-tls5modb.c6
-rw-r--r--test/nptl/tst-tls5modc.c6
-rw-r--r--test/nptl/tst-tls5modd.c6
-rw-r--r--test/nptl/tst-tls5mode.c8
-rw-r--r--test/nptl/tst-tls5modf.c9
-rw-r--r--test/nptl/tst-tsd1.c117
-rw-r--r--test/nptl/tst-tsd2.c96
-rw-r--r--test/nptl/tst-tsd3.c128
-rw-r--r--test/nptl/tst-tsd4.c102
-rw-r--r--test/nptl/tst-tsd5.c80
-rw-r--r--test/nptl/tst-tsd6.c89
-rw-r--r--test/nptl/tst-typesizes.c95
-rw-r--r--test/nptl/tst-umask1.c136
-rw-r--r--test/nptl/tst-unload.c46
-rw-r--r--test/nptl/tst-vfork1.c149
-rw-r--r--test/nptl/tst-vfork1x.c149
-rw-r--r--test/nptl/tst-vfork2.c198
-rw-r--r--test/nptl/tst-vfork2x.c198
259 files changed, 0 insertions, 31953 deletions
diff --git a/test/nptl/Makefile b/test/nptl/Makefile
deleted file mode 100644
index c22b635b7..000000000
--- a/test/nptl/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# uClibc NPTL tests
-# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
-
-top_builddir=../../
-top_srcdir=../../
-include ../Rules.mak
--include Makefile.in
-include ../Test.mak
diff --git a/test/nptl/Makefile.in b/test/nptl/Makefile.in
deleted file mode 100644
index 9a3b10489..000000000
--- a/test/nptl/Makefile.in
+++ /dev/null
@@ -1,242 +0,0 @@
-# uClibc NPTL tests
-# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
-
-TESTS := tst-align tst-align2 tst-atfork1 tst-attr1 tst-attr2 tst-attr3 \
- tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 tst-basic1 \
- tst-basic2 tst-basic3 tst-basic4 tst-basic5 tst-basic6 \
- tst-cancel1 tst-cancel2 tst-cancel3 tst-cancel6 tst-cancel7 \
- tst-cancel8 tst-cancel9 tst-cancel10 tst-cancel11 tst-cancel12 \
- tst-cancel13 tst-cancel14 tst-cancel15 tst-cancel16 \
- tst-cancel19 tst-cancel20 tst-cancel21 tst-cancel22 \
- tst-cleanup0 tst-cleanup1 tst-cleanup2 tst-cleanup3 \
- tst-cleanup4 tst-clock1 tst-clock2 tst-cond1 tst-cond2 \
- tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 tst-cond8 \
- tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
- tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 \
- tst-cond19 tst-cond20 tst-cond21 tst-detach1 tst-eintr1 \
- tst-eintr2 tst-eintr3 tst-eintr4 tst-eintr5 tst-exec2 tst-exec3 \
- tst-exec4 tst-exit1 tst-exit2 tst-exit3 tst-flock1 tst-flock2 \
- tst-fork1 tst-fork2 tst-fork3 tst-fork4 tst-initializers1 \
- tst-join1 tst-join2 tst-join3 tst-join4 tst-join5 tst-key1 \
- tst-key2 tst-key3 tst-key4 tst-kill1 tst-kill2 tst-kill3 \
- tst-kill4 tst-kill5 tst-kill6 tst-mutex1 tst-mutex2 tst-mutex3 \
- tst-mutex4 tst-mutex5 tst-mutex6 tst-mutex7 tst-mutex8 \
- tst-mutex9 tst-mutex5a tst-mutex7a tst-once1 tst-once2 \
- tst-once3 tst-once4 tst-popen1 tst-raise1 tst-rwlock1 \
- tst-rwlock2 tst-rwlock3 tst-rwlock4 tst-rwlock5 tst-rwlock6 \
- tst-rwlock7 tst-rwlock8 tst-rwlock9 tst-rwlock10 tst-rwlock11 \
- tst-rwlock12 tst-rwlock13 tst-rwlock14 tst-sched1 tst-sem1 \
- tst-sem2 tst-sem3 tst-sem4 tst-sem5 tst-sem6 tst-sem7 tst-sem8 \
- tst-sem9 tst-signal1 tst-signal2 tst-signal3 tst-signal4 \
- tst-signal5 tst-signal6 tst-spin1 tst-spin2 tst-spin3 \
- tst-stack1 tst-stack2 tst-stdio1 tst-stdio2 tst-sysconf \
- tst-tls1 tst-tls2 tst-tls3 tst-tls4 tst-tls5 tst-tsd1 tst-tsd2 \
- tst-tsd3 tst-tsd4 tst-tsd5 tst-umask1 tst-cond-deadlock \
- tst-align3 tst-cancel4 tst-cancel5 tst-cancel18 tst-cancel23 \
- tst-cancel25 tst-cancelx2 tst-cancelx3 tst-cancelx4 tst-cancelx6 \
- tst-cancelx7 tst-cancelx8 tst-cancelx9 tst-cancelx10 tst-cancelx11 \
- tst-cancelx12 tst-cancelx13 tst-cancelx14 tst-cancelx15 tst-cancelx16 \
- tst-cancelx18 tst-cancelx20 tst-cancelx21 tst-cleanupx0 tst-cleanupx1 \
- tst-cleanupx2 tst-cleanupx3 tst-cleanupx4 tst-cond22 tst-cond23 \
- tst-getpid1 tst-getpid2 tst-getpid3 tst-join6 tst-tsd6 \
- tst-oddstacklimit tst-oncex3 tst-oncex4 tst-rwlock2a \
- tst-basic7 tst-signal7 tst-vfork1x tst-vfork2x tst-sem10 tst-sem11 \
- tst-sem12 tst-typesizes tst-initializers1-c89 tst-initializers1-c99 \
- tst-initializers1-gnu89 tst-initializers1-gnu99 \
- tst-atfork2
-
-#
-# These are for the RT library and POSIX timers.
-#
-TESTS += tst-clock tst-clock_nanosleep tst-cpuclock1 tst-cpuclock2 \
- tst-cputimer1 tst-cputimer2 tst-cputimer3 tst-mqueue1 \
- tst-mqueue2 tst-mqueue3 tst-mqueue4 tst-mqueue5 tst-mqueue6 \
- tst-mqueue7 tst-mqueue8 tst-mqueue9 tst-timer2 tst-timer3 \
- tst-timer4 tst-timer5
-
-ifeq ($(UCLIBC_HAS_OBSOLETE_BSD_SIGNAL),)
-TESTS_DISABLED += tst-exec2 tst-exec3 tst-exec4
-endif
-
-ifeq ($(UCLIBC_SUSV4_LEGACY),)
-TESTS_DISABLED += tst-basic5 tst-cancel4 tst-cancel5 tst-cancelx4
-endif
-
-GLIBC_TESTS_DISABLED := tst-eintr1_glibc tst-eintr2_glibc \
- tst-eintr3_glibc tst-eintr4_glibc tst-eintr5_glibc \
- tst-tls1_glibc tst-tls2_glibc
-
-
-ifeq ($(HAVE_SHARED),)
-TESTS_DISABLED += tst-tls3 tst-tls4 tst-tls5 tst-dlsym1 tst-fini1 \
- tst-unload
-else
-GLIBC_TESTS_DISABLED += tst-tls3_glibc tst-tls4_glibc tst-tls5_glibc
-endif
-
-EXTRA_CFLAGS := -DNOT_IN_libc=1 -D_LIBC -D__USE_GNU -std=gnu99 \
- $(PTINC) \
- -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) \
- -I$(top_srcdir)libc/sysdeps/linux \
- -I$(top_builddir)include \
- -include $(top_builddir)include/libc-symbols.h
-
-ifeq ($(TARGET_ARCH),i386)
-CFLAGS_tst-align := -malign-double -mpreferred-stack-boundary=4
-endif
-ifeq ($(TARGET_ARCH),i686)
-CFLAGS_tst-align := -malign-double -mpreferred-stack-boundary=4 -msse
-endif
-CFLAGS_tst-cleanup4aux.o := -W
-CFLAGS_tst-initializers1 := -W -Werror
-CFLAGS_tst-tls3mod.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls4moda.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls4modb.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls5mod.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls5moda.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls5modb.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls5modc.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls5modd.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls5mode.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-CFLAGS_tst-tls5modf.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-
-CFLAGS_tst-fini1mod.so := -fPIC -DPIC -DSHARED -shared -DNOT_IN_libc
-LDFLAGS_tst-cond11 = -lrt
-LDFLAGS_tst-cond19 = -lrt
-
-LDFLAGS_tst-cancelx2 = -lc
-LDFLAGS_tst-cancelx3 = -lc
-LDFLAGS_tst-cancelx4 = -lc
-LDFLAGS_tst-cancelx6 = -lc
-LDFLAGS_tst-cancelx6 = -lc
-LDFLAGS_tst-cancelx7 = -lc
-LDFLAGS_tst-cancelx8 = -lc
-LDFLAGS_tst-cancelx9 = -lc
-LDFLAGS_tst-cancelx10 = -lc
-LDFLAGS_tst-cancelx11 = -lc
-LDFLAGS_tst-cancelx12 = -lc
-LDFLAGS_tst-cancelx13 = -lc
-LDFLAGS_tst-cancelx14 = -lc
-LDFLAGS_tst-cancelx15 = -lc
-LDFLAGS_tst-cancelx16 = -lc
-LDFLAGS_tst-cancelx18 = -lc
-LDFLAGS_tst-cancelx20 = -lc
-LDFLAGS_tst-cancelx21 = -lc
-LDFLAGS_tst-cleanupx0 = -lc
-LDFLAGS_tst-cleanupx1 = -lc
-LDFLAGS_tst-cleanupx2 = -lc
-LDFLAGS_tst-cleanupx3 = -lc
-LDFLAGS_tst-oncex3 = -lc
-LDFLAGS_tst-oncex4 = -lc
-LDFLAGS_tst-rwlock14 = -lrt
-LDFLAGS_tst-fini1 = -Wl,-rpath=./ tst-fini1mod.so
-LDFLAGS_tst-fini1mod.so = -Wl,-soname=tst-fini1mod.so
-LDFLAGS_tst-unload = -ldl
-LDFLAGS_tst-cancel5 := -lpthread
-LDFLAGS_tst-cancel23 := -lc -lpthread
-LDFLAGS_tst-vfork1x := -lc -lpthread
-LDFLAGS_tst-vfork2x := -lc -lpthread
-
-CFLAGS_tst-cancelx2 += -fexceptions
-CFLAGS_tst-cancelx3 += -fexceptions
-CFLAGS_tst-cancelx4 += -fexceptions
-CFLAGS_tst-cancelx6 += -fexceptions
-CFLAGS_tst-cancelx7 += -fexceptions
-CFLAGS_tst-cancelx8 += -fexceptions
-CFLAGS_tst-cancelx9 += -fexceptions
-CFLAGS_tst-cancelx10 += -fexceptions
-CFLAGS_tst-cancelx11 += -fexceptions
-CFLAGS_tst-cancelx12 += -fexceptions
-CFLAGS_tst-cancelx13 += -fexceptions
-CFLAGS_tst-cancelx14 += -fexceptions
-CFLAGS_tst-cancelx15 += -fexceptions
-CFLAGS_tst-cancelx16 += -fexceptions
-CFLAGS_tst-cancelx18 += -fexceptions
-CFLAGS_tst-cancelx20 += -fexceptions -fasynchronous-unwind-tables
-CFLAGS_tst-cancelx21 += -fexceptions -fasynchronous-unwind-tables
-CFLAGS_tst-cleanupx0 += -fexceptions -fasynchronous-unwind-tables
-CFLAGS_tst-cleanupx1 += -fexceptions -fasynchronous-unwind-tables
-CFLAGS_tst-cleanupx2 += -fexceptions
-CFLAGS_tst-cleanupx3 += -fexceptions
-
-CFLAGS_tst-oncex3 += -fexceptions
-CFLAGS_tst-oncex4 += -fexceptions
-CFLAGS_tst-align += $(stack-align-test-flags)
-CFLAGS_tst-align3 += $(stack-align-test-flags)
-CFLAGS_tst-initializers1 = -W -Wall -Werror
-CFLAGS_tst-sem11 += -fexceptions -fasynchronous-unwind-tables
-CFLAGS_tst-sem12 += -fexceptions -fasynchronous-unwind-tables
-CFLAGS_tst-initializers1 = -W -Wall -Werror
-CFLAGS_tst-initializers1-c89 = $(CFLAGS-tst-initializers1) -std=c89
-CFLAGS_tst-initializers1-c99 = $(CFLAGS-tst-initializers1) -std=c99
-CFLAGS_tst-initializers1-gnu89 = $(CFLAGS-tst-initializers1) -std=gnu89
-CFLAGS_tst-initializers1-gnu99 = $(CFLAGS-tst-initializers1) -std=gnu99
-
-EXTRA_LDFLAGS = $(if $(findstring -lpthread,$(LDFLAGS_$@)),,-lpthread)
-
-LDFLAGS_tst-atfork2 := -ldl -rdynamic
-LDFLAGS_tst-atfork2mod.so := -shared -static-libgcc -lpthread
-LDFLAGS_tst-cleanup4 := tst-cleanup4aux.o
-LDFLAGS_tst-cleanupx4 := tst-cleanup4aux.o
-LDFLAGS_tst-clock2 := -lrt
-LDFLAGS_tst-cond11 := -lrt
-LDFLAGS_tst-cond19 := -lrt
-LDFLAGS_tst-rwlock14 := -lrt
-LDFLAGS_tst-tls3 := -ldl -rdynamic
-LDFLAGS_tst-tls4 := -ldl
-LDFLAGS_tst-tls5 := tst-tls5mod.so
-LDFLAGS_tst-clock := -lrt
-LDFLAGS_tst-clock_nanosleep := -lrt
-LDFLAGS_tst-cpuclock1 := -lrt
-LDFLAGS_tst-cpuclock2 := -lrt -lpthread
-LDFLAGS_tst-cputimer1 := -lrt -lpthread
-LDFLAGS_tst-cputimer2 := -lrt -lpthread
-LDFLAGS_tst-cputimer3 := -lrt -lpthread
-LDFLAGS_tst-mqueue1 := -lrt
-LDFLAGS_tst-mqueue2 := -lrt
-LDFLAGS_tst-mqueue3 := -lrt -lpthread
-LDFLAGS_tst-mqueue4 := -lrt
-LDFLAGS_tst-mqueue5 := -lrt -lpthread
-LDFLAGS_tst-mqueue6 := -lrt -lpthread
-LDFLAGS_tst-mqueue7 := -lrt
-LDFLAGS_tst-mqueue8 := -lrt
-LDFLAGS_tst-mqueue9 := -lrt
-LDFLAGS_tst-timer2 := -lrt -lpthread
-LDFLAGS_tst-timer3 := -lrt -lpthread
-LDFLAGS_tst-timer4 := -lrt -lpthread
-LDFLAGS_tst-timer5 := -lrt -lpthread
-LDFLAGS_tst-dlsym1 := -ldl -rdynamic
-LDFLAGS_tst-tls3mod.so := -shared -static-libgcc -lpthread
-LDFLAGS_tst-tls4moda.so := -shared -static-libgcc
-LDFLAGS_tst-tls4modb.so := -shared -static-libgcc
-LDFLAGS_tst-tls5mod.so := -shared -static-libgcc -Wl,-soname,tst-tls5mod.so
-LDFLAGS_tst-tls5moda.so := -shared -static-libgcc
-LDFLAGS_tst-tls5modb.so := -shared -static-libgcc
-LDFLAGS_tst-tls5modc.so := -shared -static-libgcc
-LDFLAGS_tst-tls5modd.so := -shared -static-libgcc
-LDFLAGS_tst-tls5mode.so := -shared -static-libgcc
-LDFLAGS_tst-tls5modf.so := -shared -static-libgcc
-LDFLAGS_tst-cleanupx4 := tst-cleanup4aux.o
-
-#
-# Special case
-#
-tst-cleanup4aux.o:
- $(Q)$(CC) $(CFLAGS) $(CFLAGS_$@) $(EXTRA_CFLAGS) -c tst-cleanup4aux.c -o $@
-
-tst-cleanup4: tst-cleanup4aux.o
-tst-tls3: tst-tls3mod.so
-tst-tls4: tst-tls4moda.so tst-tls4modb.so
-tst-tls5: tst-tls5mod.so
-
-tst-cleanupx4 : tst-cleanup4aux.o
-tst-fini1: tst-fini1mod.so
-
-tst-atfork2: tst-atfork2mod.so
-tst-atfork2_glibc: tst-atfork2mod.so.glibc
-
-OPTS_tst-cancel7 = -c ./tst-cancel7
-OPTS_tst-mqueue7 = -- ./tst-mqueue7
-OPTS_tst-exec4 = ./tst-exec4
-
-WRAPPER := env LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)" TIMEOUTFACTOR=10
diff --git a/test/nptl/eintr.c b/test/nptl/eintr.c
deleted file mode 100644
index d6425b51b..000000000
--- a/test/nptl/eintr.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <unistd.h>
-
-
-static int the_sig;
-
-
-static void
-eintr_handler (int sig)
-{
- if (sig != the_sig)
- {
- write (STDOUT_FILENO, "eintr_handler: signal number wrong\n", 35);
- _exit (1);
- }
- write (STDOUT_FILENO, ".", 1);
-}
-
-
-static void *
-eintr_source (void *arg)
-{
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 500000 };
-
- if (arg == NULL)
- {
- sigset_t ss;
- sigemptyset (&ss);
- sigaddset (&ss, the_sig);
- pthread_sigmask (SIG_BLOCK, &ss, NULL);
- }
-
- while (1)
- {
- if (arg != NULL)
- pthread_kill (*(pthread_t *) arg, the_sig);
- else
- kill (getpid (), the_sig);
-
- nanosleep (&ts, NULL);
- }
-
- /* NOTREACHED */
- return NULL;
-}
-
-
-static void
-setup_eintr (int sig, pthread_t *thp)
-{
- struct sigaction sa;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- sa.sa_handler = eintr_handler;
- if (sigaction (sig, &sa, NULL) != 0)
- {
- puts ("setup_eintr: sigaction failed");
- exit (1);
- }
- the_sig = sig;
-
- /* Create the thread which will fire off the signals. */
- pthread_t th;
- if (pthread_create (&th, NULL, eintr_source, thp) != 0)
- {
- puts ("setup_eintr: pthread_create failed");
- exit (1);
- }
-}
diff --git a/test/nptl/tst-align.c b/test/nptl/tst-align.c
deleted file mode 100644
index df66b38b7..000000000
--- a/test/nptl/tst-align.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include "tst-stack-align.h"
-
-static void *
-tf (void *arg)
-{
- bool ok = true;
-
- puts ("in thread");
-
- if (TEST_STACK_ALIGN ())
- ok = false;
-
- return ok ? NULL : (void *) -1l;
-}
-
-static int
-do_test (void)
-{
- bool ok = true;
-
- puts ("in main");
-
- if (TEST_STACK_ALIGN ())
- ok = false;
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- void *res;
- if (pthread_join (th, &res) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (res != NULL)
- ok = false;
-
- return ok ? 0 : 1;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-align2.c b/test/nptl/tst-align2.c
deleted file mode 100644
index 7d3a09913..000000000
--- a/test/nptl/tst-align2.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <sched.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include "tst-stack-align.h"
-
-static int
-f (void *arg)
-{
- bool ok = true;
-
- if (TEST_STACK_ALIGN ())
- ok = false;
-
- return ok ? 0 : 1;
-}
-
-static int
-do_test (void)
-{
- bool ok = true;
-
- puts ("in main");
-
- if (TEST_STACK_ALIGN ())
- ok = false;
-
-#ifdef __ia64__
- extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base,
- size_t __child_stack_size, int __flags,
- void *__arg, ...);
- char st[256 * 1024];
- pid_t p = __clone2 (f, st, sizeof (st), 0, 0);
-#else
- char st[128 * 1024];
- pid_t p = clone (f, st + sizeof (st), 0, 0);
-#endif
- if (p == -1)
- {
- printf("clone failed: %m\n");
- return 1;
- }
-
- int e;
- if (waitpid (p, &e, __WCLONE) != p)
- {
- puts ("waitpid failed");
- kill (p, SIGKILL);
- return 1;
- }
- if (!WIFEXITED (e))
- {
- if (WIFSIGNALED (e))
- printf ("died from signal %s\n", strsignal (WTERMSIG (e)));
- else
- puts ("did not terminate correctly");
- return 1;
- }
- if (WEXITSTATUS (e) != 0)
- ok = false;
-
- return ok ? 0 : 1;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-align3.c b/test/nptl/tst-align3.c
deleted file mode 100644
index fb0a8e4ec..000000000
--- a/test/nptl/tst-align3.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include "tst-stack-align.h"
-
-static bool ok = true;
-static pthread_once_t once = PTHREAD_ONCE_INIT;
-
-static void
-once_test (void)
-{
- puts ("in once_test");
-
- if (TEST_STACK_ALIGN ())
- ok = false;
-}
-
-static int
-do_test (void)
-{
- puts ("in main");
-
- if (TEST_STACK_ALIGN ())
- ok = false;
-
- if (pthread_once (&once, once_test))
- {
- puts ("pthread once failed");
- return 1;
- }
-
- return ok ? 0 : 1;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-atfork1.c b/test/nptl/tst-atfork1.c
deleted file mode 100644
index 129893747..000000000
--- a/test/nptl/tst-atfork1.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static int val;
-
-
-static void
-prepare1 (void)
-{
- val *= 2;
-}
-
-static void
-prepare2 (void)
-{
- ++val;
-}
-
-static void
-parent1 (void)
-{
- val += 4;
-}
-
-static void
-parent2 (void)
-{
- val *= 4;
-}
-
-static void
-child1 (void)
-{
- val += 8;
-}
-
-static void
-child2 (void)
-{
- val *= 8;
-}
-
-
-static int
-do_test (void)
-{
- pid_t pid;
- int status = 0;
-
- if (pthread_atfork (prepare1, parent1, child1) != 0)
- {
- puts ("1st atfork failed");
- exit (1);
- }
- if (pthread_atfork (prepare2, parent2, child2) != 0)
- {
- puts ("2nd atfork failed");
- exit (1);
- }
-
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid != 0)
- {
- /* Parent. */
- if (val != 24)
- {
- printf ("expected val=%d, got %d\n", 24, val);
- exit (1);
- }
-
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("waitpid failed");
- exit (1);
- }
- }
- else
- {
- /* Child. */
- if (val != 80)
- {
- printf ("expected val=%d, got %d\n", 80, val);
- exit (2);
- }
- }
-
- return status;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-atfork2.c b/test/nptl/tst-atfork2.c
deleted file mode 100644
index 594f56ef3..000000000
--- a/test/nptl/tst-atfork2.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/* Copyright (C) 2003-2016 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <dlfcn.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-/* Must be exported. */
-int val;
-
-static void
-prepare (void)
-{
- val *= 2;
-}
-
-static void
-parent (void)
-{
- val += 4;
-}
-
-static void
-child (void)
-{
- val += 8;
-}
-
-
-static int
-do_test (void)
-{
-
- if (pthread_atfork (prepare, parent, child) != 0)
- {
- puts ("do_test: atfork failed");
- exit (1);
- }
-
- void *h = dlopen ("tst-atfork2mod.so", RTLD_LAZY);
- if (h == NULL)
- {
- printf ("dlopen failed: %s\n", dlerror ());
- exit (1);
- }
-
- /* First trial of fork. */
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("1st fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- /* Child. */
- if (val != 80)
- {
- printf ("1st: expected val=%d, got %d\n", 80, val);
- exit (2);
- }
-
- exit (0);
- }
-
- /* Parent. */
- if (val != 24)
- {
- printf ("1st: expected val=%d, got %d\n", 24, val);
- exit (1);
- }
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("1st waitpid failed");
- exit (1);
- }
-
- if (status != 0)
- exit (status);
-
- puts ("unloading now");
-
- /* Unload the module. */
- if (dlclose (h) != 0)
- {
- puts ("dlclose failed");
- exit (1);
- }
-
- puts ("2nd fork");
-
- /* Second fork trial. */
- val = 1;
- pid = fork ();
- if (pid == -1)
- {
- puts ("2nd fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- /* Child. */
- if (val != 10)
- {
- printf ("2nd: expected val=%d, got %d\n", 10, val);
- exit (3);
- }
-
- exit (0);
- }
-
- /* Parent. */
- if (val != 6)
- {
- printf ("2nd: expected val=%d, got %d\n", 6, val);
- exit (1);
- }
-
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("2nd waitpid failed");
- exit (1);
- }
-
- if (status != 0)
- exit (status);
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-atfork2mod.c b/test/nptl/tst-atfork2mod.c
deleted file mode 100644
index 7c592b471..000000000
--- a/test/nptl/tst-atfork2mod.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 2003-2016 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-extern int val;
-
-
-static void
-prepare (void)
-{
- ++val;
-}
-
-static void
-parent (void)
-{
- val *= 4;
-}
-
-static void
-child (void)
-{
- val *= 8;
-}
-
-static void
-__attribute__ ((constructor))
-init (void)
-{
- extern void *__dso_handle;
- printf ("dsohandle = %p\n", __dso_handle);
-
- if (pthread_atfork (prepare, parent, child) != 0)
- {
- puts ("init: atfork failed");
- exit (1);
- }
-}
diff --git a/test/nptl/tst-attr1.c b/test/nptl/tst-attr1.c
deleted file mode 100644
index 987f87ff5..000000000
--- a/test/nptl/tst-attr1.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-int
-do_test (void)
-{
- int i;
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- pthread_mutexattr_t ma;
-
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("mutexattr_init failed");
- exit (1);
- }
-
- pthread_rwlockattr_t rwa;
-
- if (pthread_rwlockattr_init (&rwa) != 0)
- {
- puts ("rwlockattr_init failed");
- exit (1);
- }
-
- /* XXX Remove if default value is clear. */
- pthread_attr_setinheritsched (&a, PTHREAD_INHERIT_SCHED);
- pthread_attr_setschedpolicy (&a, SCHED_OTHER);
- pthread_attr_setscope (&a, PTHREAD_SCOPE_SYSTEM);
-
- for (i = 0; i < 10000; ++i)
- {
- long int r = random ();
-
- if (r != PTHREAD_CREATE_DETACHED && r != PTHREAD_CREATE_JOINABLE)
- {
- int e = pthread_attr_setdetachstate (&a, r);
-
- if (e == 0)
- {
- printf ("attr_setdetachstate with value %ld succeeded\n", r);
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("attr_setdetachstate didn't return EINVAL");
- exit (1);
- }
-
- int s;
- if (pthread_attr_getdetachstate (&a, &s) != 0)
- {
- puts ("attr_getdetachstate failed");
- exit (1);
- }
-
- if (s != PTHREAD_CREATE_JOINABLE)
- {
- printf ("\
-detach state changed to %d by invalid setdetachstate call\n", s);
- exit (1);
- }
- }
-
- if (r != PTHREAD_INHERIT_SCHED && r != PTHREAD_EXPLICIT_SCHED)
- {
- int e = pthread_attr_setinheritsched (&a, r);
-
- if (e == 0)
- {
- printf ("attr_setinheritsched with value %ld succeeded\n", r);
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("attr_setinheritsched didn't return EINVAL");
- exit (1);
- }
-
- int s;
- if (pthread_attr_getinheritsched (&a, &s) != 0)
- {
- puts ("attr_getinheritsched failed");
- exit (1);
- }
-
- if (s != PTHREAD_INHERIT_SCHED)
- {
- printf ("\
-inheritsched changed to %d by invalid setinheritsched call\n", s);
- exit (1);
- }
- }
-
- if (r != SCHED_OTHER && r != SCHED_RR && r != SCHED_FIFO)
- {
- int e = pthread_attr_setschedpolicy (&a, r);
-
- if (e == 0)
- {
- printf ("attr_setschedpolicy with value %ld succeeded\n", r);
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("attr_setschedpolicy didn't return EINVAL");
- exit (1);
- }
-
- int s;
- if (pthread_attr_getschedpolicy (&a, &s) != 0)
- {
- puts ("attr_getschedpolicy failed");
- exit (1);
- }
-
- if (s != SCHED_OTHER)
- {
- printf ("\
-schedpolicy changed to %d by invalid setschedpolicy call\n", s);
- exit (1);
- }
- }
-
- if (r != PTHREAD_SCOPE_SYSTEM && r != PTHREAD_SCOPE_PROCESS)
- {
- int e = pthread_attr_setscope (&a, r);
-
- if (e == 0)
- {
- printf ("attr_setscope with value %ld succeeded\n", r);
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("attr_setscope didn't return EINVAL");
- exit (1);
- }
-
- int s;
- if (pthread_attr_getscope (&a, &s) != 0)
- {
- puts ("attr_getscope failed");
- exit (1);
- }
-
- if (s != PTHREAD_SCOPE_SYSTEM)
- {
- printf ("\
-contentionscope changed to %d by invalid setscope call\n", s);
- exit (1);
- }
- }
-
- if (r != PTHREAD_PROCESS_PRIVATE && r != PTHREAD_PROCESS_SHARED)
- {
- int e = pthread_mutexattr_setpshared (&ma, r);
-
- if (e == 0)
- {
- printf ("mutexattr_setpshared with value %ld succeeded\n", r);
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("mutexattr_setpshared didn't return EINVAL");
- exit (1);
- }
-
- int s;
- if (pthread_mutexattr_getpshared (&ma, &s) != 0)
- {
- puts ("mutexattr_getpshared failed");
- exit (1);
- }
-
- if (s != PTHREAD_PROCESS_PRIVATE)
- {
- printf ("\
-pshared changed to %d by invalid mutexattr_setpshared call\n", s);
- exit (1);
- }
-
- e = pthread_rwlockattr_setpshared (&rwa, r);
-
- if (e == 0)
- {
- printf ("rwlockattr_setpshared with value %ld succeeded\n", r);
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("rwlockattr_setpshared didn't return EINVAL");
- exit (1);
- }
-
- if (pthread_rwlockattr_getpshared (&rwa, &s) != 0)
- {
- puts ("rwlockattr_getpshared failed");
- exit (1);
- }
-
- if (s != PTHREAD_PROCESS_PRIVATE)
- {
- printf ("\
-pshared changed to %d by invalid rwlockattr_setpshared call\n", s);
- exit (1);
- }
- }
-
- if (r != PTHREAD_CANCEL_ENABLE && r != PTHREAD_CANCEL_DISABLE)
- {
- int e = pthread_setcancelstate (r, NULL);
-
- if (e == 0)
- {
- printf ("setcancelstate with value %ld succeeded\n", r);
- exit (1);
- }
-
- if (e != EINVAL)
- {
- puts ("setcancelstate didn't return EINVAL");
- exit (1);
- }
-
- int s;
- if (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, &s) != 0)
- {
- puts ("setcancelstate failed for PTHREAD_CANCEL_ENABLE");
- exit (1);
- }
-
- if (s != PTHREAD_CANCEL_ENABLE)
- {
- puts ("invalid setcancelstate changed state");
- exit (1);
- }
- }
-
- if (r != PTHREAD_CANCEL_DEFERRED && r != PTHREAD_CANCEL_ASYNCHRONOUS)
- {
- int e = pthread_setcanceltype (r, NULL);
-
- if (e == 0)
- {
- printf ("setcanceltype with value %ld succeeded\n", r);
- exit (1);
- }
-
- if (e != EINVAL)
- {
- puts ("setcanceltype didn't return EINVAL");
- exit (1);
- }
-
- int s;
- if (pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &s) != 0)
- {
- puts ("setcanceltype failed for PTHREAD_CANCEL_DEFERRED");
- exit (1);
- }
-
- if (s != PTHREAD_CANCEL_DEFERRED)
- {
- puts ("invalid setcanceltype changed state");
- exit (1);
- }
- }
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-attr2.c b/test/nptl/tst-attr2.c
deleted file mode 100644
index e8f9cc986..000000000
--- a/test/nptl/tst-attr2.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-int
-do_test (void)
-{
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- /* Check default value of detach state. */
- int s;
- if (pthread_attr_getdetachstate (&a, &s) != 0)
- {
- puts ("1st attr_getdestachstate failed");
- exit (1);
- }
- if (s != PTHREAD_CREATE_JOINABLE)
- {
- printf ("\
-default detach state wrong: %d, expected %d (PTHREAD_CREATE_JOINABLE)\n",
- s, PTHREAD_CREATE_JOINABLE);
- exit (1);
- }
-
- int e = pthread_attr_setdetachstate (&a, PTHREAD_CREATE_DETACHED);
- if (e != 0)
- {
- puts ("1st attr_setdetachstate failed");
- exit (1);
- }
- if (pthread_attr_getdetachstate (&a, &s) != 0)
- {
- puts ("2nd attr_getdestachstate failed");
- exit (1);
- }
- if (s != PTHREAD_CREATE_DETACHED)
- {
- puts ("PTHREAD_CREATE_DETACHED set, but not given back");
- exit (1);
- }
-
- e = pthread_attr_setdetachstate (&a, PTHREAD_CREATE_JOINABLE);
- if (e != 0)
- {
- puts ("2nd attr_setdetachstate failed");
- exit (1);
- }
- if (pthread_attr_getdetachstate (&a, &s) != 0)
- {
- puts ("3rd attr_getdestachstate failed");
- exit (1);
- }
- if (s != PTHREAD_CREATE_JOINABLE)
- {
- puts ("PTHREAD_CREATE_JOINABLE set, but not given back");
- exit (1);
- }
-
-
- size_t g;
- if (pthread_attr_getguardsize (&a, &g) != 0)
- {
- puts ("1st attr_getguardsize failed");
- exit (1);
- }
- if (g != (size_t) sysconf (_SC_PAGESIZE))
- {
- printf ("default guardsize %zu, expected %ld (PAGESIZE)\n",
- g, sysconf (_SC_PAGESIZE));
- exit (1);
- }
-
- e = pthread_attr_setguardsize (&a, 0);
- if (e != 0)
- {
- puts ("1st attr_setguardsize failed");
- exit (1);
- }
- if (pthread_attr_getguardsize (&a, &g) != 0)
- {
- puts ("2nd attr_getguardsize failed");
- exit (1);
- }
- if (g != 0)
- {
- printf ("guardsize set to zero but %zu returned\n", g);
- exit (1);
- }
-
- e = pthread_attr_setguardsize (&a, 1);
- if (e != 0)
- {
- puts ("2nd attr_setguardsize failed");
- exit (1);
- }
- if (pthread_attr_getguardsize (&a, &g) != 0)
- {
- puts ("3rd attr_getguardsize failed");
- exit (1);
- }
- if (g != 1)
- {
- printf ("guardsize set to 1 but %zu returned\n", g);
- exit (1);
- }
-
-
- if (pthread_attr_getinheritsched (&a, &s) != 0)
- {
- puts ("1st attr_getinheritsched failed");
- exit (1);
- }
- /* XXX What is the correct default value. */
- if (s != PTHREAD_INHERIT_SCHED && s != PTHREAD_EXPLICIT_SCHED)
- {
- puts ("incorrect default value for inheritsched");
- exit (1);
- }
-
- e = pthread_attr_setinheritsched (&a, PTHREAD_EXPLICIT_SCHED);
- if (e != 0)
- {
- puts ("1st attr_setinheritsched failed");
- exit (1);
- }
- if (pthread_attr_getinheritsched (&a, &s) != 0)
- {
- puts ("2nd attr_getinheritsched failed");
- exit (1);
- }
- if (s != PTHREAD_EXPLICIT_SCHED)
- {
- printf ("inheritsched set to PTHREAD_EXPLICIT_SCHED, but got %d\n", s);
- exit (1);
- }
-
- e = pthread_attr_setinheritsched (&a, PTHREAD_INHERIT_SCHED);
- if (e != 0)
- {
- puts ("2nd attr_setinheritsched failed");
- exit (1);
- }
- if (pthread_attr_getinheritsched (&a, &s) != 0)
- {
- puts ("3rd attr_getinheritsched failed");
- exit (1);
- }
- if (s != PTHREAD_INHERIT_SCHED)
- {
- printf ("inheritsched set to PTHREAD_INHERIT_SCHED, but got %d\n", s);
- exit (1);
- }
-
-
- if (pthread_attr_getschedpolicy (&a, &s) != 0)
- {
- puts ("1st attr_getschedpolicy failed");
- exit (1);
- }
- /* XXX What is the correct default value. */
- if (s != SCHED_OTHER && s != SCHED_FIFO && s != SCHED_RR)
- {
- puts ("incorrect default value for schedpolicy");
- exit (1);
- }
-
- e = pthread_attr_setschedpolicy (&a, SCHED_RR);
- if (e != 0)
- {
- puts ("1st attr_setschedpolicy failed");
- exit (1);
- }
- if (pthread_attr_getschedpolicy (&a, &s) != 0)
- {
- puts ("2nd attr_getschedpolicy failed");
- exit (1);
- }
- if (s != SCHED_RR)
- {
- printf ("schedpolicy set to SCHED_RR, but got %d\n", s);
- exit (1);
- }
-
- e = pthread_attr_setschedpolicy (&a, SCHED_FIFO);
- if (e != 0)
- {
- puts ("2nd attr_setschedpolicy failed");
- exit (1);
- }
- if (pthread_attr_getschedpolicy (&a, &s) != 0)
- {
- puts ("3rd attr_getschedpolicy failed");
- exit (1);
- }
- if (s != SCHED_FIFO)
- {
- printf ("schedpolicy set to SCHED_FIFO, but got %d\n", s);
- exit (1);
- }
-
- e = pthread_attr_setschedpolicy (&a, SCHED_OTHER);
- if (e != 0)
- {
- puts ("3rd attr_setschedpolicy failed");
- exit (1);
- }
- if (pthread_attr_getschedpolicy (&a, &s) != 0)
- {
- puts ("4th attr_getschedpolicy failed");
- exit (1);
- }
- if (s != SCHED_OTHER)
- {
- printf ("schedpolicy set to SCHED_OTHER, but got %d\n", s);
- exit (1);
- }
-
-
- if (pthread_attr_getscope (&a, &s) != 0)
- {
- puts ("1st attr_getscope failed");
- exit (1);
- }
- /* XXX What is the correct default value. */
- if (s != PTHREAD_SCOPE_SYSTEM && s != PTHREAD_SCOPE_PROCESS)
- {
- puts ("incorrect default value for contentionscope");
- exit (1);
- }
-
- e = pthread_attr_setscope (&a, PTHREAD_SCOPE_PROCESS);
- if (e != ENOTSUP)
- {
- if (e != 0)
- {
- puts ("1st attr_setscope failed");
- exit (1);
- }
- if (pthread_attr_getscope (&a, &s) != 0)
- {
- puts ("2nd attr_getscope failed");
- exit (1);
- }
- if (s != PTHREAD_SCOPE_PROCESS)
- {
- printf ("\
-contentionscope set to PTHREAD_SCOPE_PROCESS, but got %d\n", s);
- exit (1);
- }
- }
-
- e = pthread_attr_setscope (&a, PTHREAD_SCOPE_SYSTEM);
- if (e != 0)
- {
- puts ("2nd attr_setscope failed");
- exit (1);
- }
- if (pthread_attr_getscope (&a, &s) != 0)
- {
- puts ("3rd attr_getscope failed");
- exit (1);
- }
- if (s != PTHREAD_SCOPE_SYSTEM)
- {
- printf ("contentionscope set to PTHREAD_SCOPE_SYSTEM, but got %d\n", s);
- exit (1);
- }
-
- char buf[1];
- e = pthread_attr_setstack (&a, buf, 1);
- if (e != EINVAL)
- {
- puts ("setstack with size 1 did not produce EINVAL");
- exit (1);
- }
-
- e = pthread_attr_setstacksize (&a, 1);
- if (e != EINVAL)
- {
- puts ("setstacksize with size 1 did not produce EINVAL");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-attr3.c b/test/nptl/tst-attr3.c
deleted file mode 100644
index 5ccf9abba..000000000
--- a/test/nptl/tst-attr3.c
+++ /dev/null
@@ -1,419 +0,0 @@
-/* pthread_getattr_np test.
- Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <error.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-static void *
-tf (void *arg)
-{
- pthread_attr_t a, *ap, a2;
- int err;
- void *result = NULL;
-
- if (arg == NULL)
- {
- ap = &a2;
- err = pthread_attr_init (ap);
- if (err)
- {
- error (0, err, "pthread_attr_init failed");
- return tf;
- }
- }
- else
- ap = (pthread_attr_t *) arg;
-
- err = pthread_getattr_np (pthread_self (), &a);
- if (err)
- {
- error (0, err, "pthread_getattr_np failed");
- result = tf;
- }
-
- int detachstate1, detachstate2;
- err = pthread_attr_getdetachstate (&a, &detachstate1);
- if (err)
- {
- error (0, err, "pthread_attr_getdetachstate failed");
- result = tf;
- }
- else
- {
- err = pthread_attr_getdetachstate (ap, &detachstate2);
- if (err)
- {
- error (0, err, "pthread_attr_getdetachstate failed");
- result = tf;
- }
- else if (detachstate1 != detachstate2)
- {
- error (0, 0, "detachstate differs %d != %d",
- detachstate1, detachstate2);
- result = tf;
- }
- }
-
- void *stackaddr;
- size_t stacksize;
- err = pthread_attr_getstack (&a, &stackaddr, &stacksize);
- if (err)
- {
- error (0, err, "pthread_attr_getstack failed");
- result = tf;
- }
- else if ((void *) &a < stackaddr
- || (void *) &a >= stackaddr + stacksize)
- {
- error (0, 0, "pthread_attr_getstack returned range does not cover thread's stack");
- result = tf;
- }
- else
- printf ("thread stack %p-%p (0x%zx)\n", stackaddr, stackaddr + stacksize,
- stacksize);
-
- size_t guardsize1, guardsize2;
- err = pthread_attr_getguardsize (&a, &guardsize1);
- if (err)
- {
- error (0, err, "pthread_attr_getguardsize failed");
- result = tf;
- }
- else
- {
- err = pthread_attr_getguardsize (ap, &guardsize2);
- if (err)
- {
- error (0, err, "pthread_attr_getguardsize failed");
- result = tf;
- }
- else if (guardsize1 != guardsize2)
- {
- error (0, 0, "guardsize differs %zd != %zd",
- guardsize1, guardsize2);
- result = tf;
- }
- else
- printf ("thread guardsize %zd\n", guardsize1);
- }
-
- int scope1, scope2;
- err = pthread_attr_getscope (&a, &scope1);
- if (err)
- {
- error (0, err, "pthread_attr_getscope failed");
- result = tf;
- }
- else
- {
- err = pthread_attr_getscope (ap, &scope2);
- if (err)
- {
- error (0, err, "pthread_attr_getscope failed");
- result = tf;
- }
- else if (scope1 != scope2)
- {
- error (0, 0, "scope differs %d != %d",
- scope1, scope2);
- result = tf;
- }
- }
-
- int inheritsched1, inheritsched2;
- err = pthread_attr_getinheritsched (&a, &inheritsched1);
- if (err)
- {
- error (0, err, "pthread_attr_getinheritsched failed");
- result = tf;
- }
- else
- {
- err = pthread_attr_getinheritsched (ap, &inheritsched2);
- if (err)
- {
- error (0, err, "pthread_attr_getinheritsched failed");
- result = tf;
- }
- else if (inheritsched1 != inheritsched2)
- {
- error (0, 0, "inheritsched differs %d != %d",
- inheritsched1, inheritsched2);
- result = tf;
- }
- }
-
- cpu_set_t c1, c2;
- err = pthread_getaffinity_np (pthread_self (), sizeof (c1), &c1);
- if (err == 0)
- {
- err = pthread_attr_getaffinity_np (&a, sizeof (c2), &c2);
- if (err)
- {
- error (0, err, "pthread_attr_getaffinity_np failed");
- result = tf;
- }
- else if (memcmp (&c1, &c2, sizeof (c1)))
- {
- error (0, 0, "pthread_attr_getaffinity_np returned different CPU mask than pthread_getattr_np");
- result = tf;
- }
- }
-
- err = pthread_attr_destroy (&a);
- if (err)
- {
- error (0, err, "pthread_attr_destroy failed");
- result = tf;
- }
-
- if (ap == &a2)
- {
- err = pthread_attr_destroy (ap);
- if (err)
- {
- error (0, err, "pthread_attr_destroy failed");
- result = tf;
- }
- }
-
- return result;
-}
-
-
-static int
-do_test (void)
-{
- int result = 0;
- pthread_attr_t a;
- cpu_set_t c1, c2;
-
- int err = pthread_attr_init (&a);
- if (err)
- {
- error (0, err, "pthread_attr_init failed");
- result = 1;
- }
-
- err = pthread_attr_getaffinity_np (&a, sizeof (c1), &c1);
- if (err && err != ENOSYS)
- {
- error (0, err, "pthread_attr_getaffinity_np failed");
- result = 1;
- }
-
- err = pthread_attr_destroy (&a);
- if (err)
- {
- error (0, err, "pthread_attr_destroy failed");
- result = 1;
- }
-
- err = pthread_getattr_np (pthread_self (), &a);
- if (err)
- {
- error (0, err, "pthread_getattr_np failed");
- result = 1;
- }
-
- int detachstate;
- err = pthread_attr_getdetachstate (&a, &detachstate);
- if (err)
- {
- error (0, err, "pthread_attr_getdetachstate failed");
- result = 1;
- }
- else if (detachstate != PTHREAD_CREATE_JOINABLE)
- {
- error (0, 0, "initial thread not joinable");
- result = 1;
- }
-
- void *stackaddr;
- size_t stacksize;
- err = pthread_attr_getstack (&a, &stackaddr, &stacksize);
- if (err)
- {
- error (0, err, "pthread_attr_getstack failed");
- result = 1;
- }
- else if ((void *) &a < stackaddr
- || (void *) &a >= stackaddr + stacksize)
- {
- error (0, 0, "pthread_attr_getstack returned range does not cover main's stack");
- result = 1;
- }
- else
- printf ("initial thread stack %p-%p (0x%zx)\n", stackaddr,
- stackaddr + stacksize, stacksize);
-
- size_t guardsize;
- err = pthread_attr_getguardsize (&a, &guardsize);
- if (err)
- {
- error (0, err, "pthread_attr_getguardsize failed");
- result = 1;
- }
- else if (guardsize != 0)
- {
- error (0, 0, "pthread_attr_getguardsize returned %zd != 0",
- guardsize);
- result = 1;
- }
-
- int scope;
- err = pthread_attr_getscope (&a, &scope);
- if (err)
- {
- error (0, err, "pthread_attr_getscope failed");
- result = 1;
- }
- else if (scope != PTHREAD_SCOPE_SYSTEM)
- {
- error (0, 0, "pthread_attr_getscope returned %d != PTHREAD_SCOPE_SYSTEM",
- scope);
- result = 1;
- }
-
- int inheritsched;
- err = pthread_attr_getinheritsched (&a, &inheritsched);
- if (err)
- {
- error (0, err, "pthread_attr_getinheritsched failed");
- result = 1;
- }
- else if (inheritsched != PTHREAD_INHERIT_SCHED)
- {
- error (0, 0, "pthread_attr_getinheritsched returned %d != PTHREAD_INHERIT_SCHED",
- inheritsched);
- result = 1;
- }
-
- err = pthread_getaffinity_np (pthread_self (), sizeof (c1), &c1);
- if (err == 0)
- {
- err = pthread_attr_getaffinity_np (&a, sizeof (c2), &c2);
- if (err)
- {
- error (0, err, "pthread_attr_getaffinity_np failed");
- result = 1;
- }
- else if (memcmp (&c1, &c2, sizeof (c1)))
- {
- error (0, 0, "pthread_attr_getaffinity_np returned different CPU mask than pthread_getattr_np");
- result = 1;
- }
- }
-
- err = pthread_attr_destroy (&a);
- if (err)
- {
- error (0, err, "pthread_attr_destroy failed");
- result = 1;
- }
-
- pthread_t th;
- err = pthread_create (&th, NULL, tf, NULL);
- if (err)
- {
- error (0, err, "pthread_create #1 failed");
- result = 1;
- }
- else
- {
- void *ret;
- err = pthread_join (th, &ret);
- if (err)
- {
- error (0, err, "pthread_join #1 failed");
- result = 1;
- }
- else if (ret != NULL)
- result = 1;
- }
-
- err = pthread_attr_init (&a);
- if (err)
- {
- error (0, err, "pthread_attr_init failed");
- result = 1;
- }
-
- err = pthread_create (&th, &a, tf, &a);
- if (err)
- {
- error (0, err, "pthread_create #2 failed");
- result = 1;
- }
- else
- {
- void *ret;
- err = pthread_join (th, &ret);
- if (err)
- {
- error (0, err, "pthread_join #2 failed");
- result = 1;
- }
- else if (ret != NULL)
- result = 1;
- }
-
- err = pthread_attr_setguardsize (&a, 16 * sysconf (_SC_PAGESIZE));
- if (err)
- {
- error (0, err, "pthread_attr_setguardsize failed");
- result = 1;
- }
-
- err = pthread_create (&th, &a, tf, &a);
- if (err)
- {
- error (0, err, "pthread_create #3 failed");
- result = 1;
- }
- else
- {
- void *ret;
- err = pthread_join (th, &ret);
- if (err)
- {
- error (0, err, "pthread_join #3 failed");
- result = 1;
- }
- else if (ret != NULL)
- result = 1;
- }
-
- err = pthread_attr_destroy (&a);
- if (err)
- {
- error (0, err, "pthread_attr_destroy failed");
- result = 1;
- }
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-barrier1.c b/test/nptl/tst-barrier1.c
deleted file mode 100644
index 4e396c97a..000000000
--- a/test/nptl/tst-barrier1.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
- pthread_barrier_t b;
- int e;
- int cnt;
-
- e = pthread_barrier_init (&b, NULL, 0);
- if (e == 0)
- {
- puts ("barrier_init with count 0 succeeded");
- return 1;
- }
- if (e != EINVAL)
- {
- puts ("barrier_init with count 0 didn't return EINVAL");
- return 1;
- }
-
- if (pthread_barrier_init (&b, NULL, 1) != 0)
- {
- puts ("real barrier_init failed");
- return 1;
- }
-
- for (cnt = 0; cnt < 10; ++cnt)
- {
- e = pthread_barrier_wait (&b);
-
- if (e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait didn't return PTHREAD_BARRIER_SERIAL_THREAD");
- return 1;
- }
- }
-
- if (pthread_barrier_destroy (&b) != 0)
- {
- puts ("barrier_destroy failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-barrier2.c b/test/nptl/tst-barrier2.c
deleted file mode 100644
index 8ffcda063..000000000
--- a/test/nptl/tst-barrier2.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-barrier2.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_barrier_t *b;
- pthread_barrierattr_t a;
- pid_t pid;
- int serials = 0;
- int cnt;
- int status;
- int p;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- b = (pthread_barrier_t *) (((uintptr_t) mem + __alignof (pthread_barrier_t))
- & ~(__alignof (pthread_barrier_t) - 1));
-
- if (pthread_barrierattr_init (&a) != 0)
- {
- puts ("barrierattr_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_getpshared (&a, &p) != 0)
- {
- puts ("1st barrierattr_getpshared failed");
- return 1;
- }
-
- if (p != PTHREAD_PROCESS_PRIVATE)
- {
- puts ("default pshared value wrong");
- return 1;
- }
-
- if (pthread_barrierattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("barrierattr_setpshared failed");
- return 1;
- }
-
- if (pthread_barrierattr_getpshared (&a, &p) != 0)
- {
- puts ("2nd barrierattr_getpshared failed");
- return 1;
- }
-
- if (p != PTHREAD_PROCESS_SHARED)
- {
- puts ("pshared value after setpshared call wrong");
- return 1;
- }
-
- if (pthread_barrier_init (b, &a, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_destroy (&a) != 0)
- {
- puts ("barrierattr_destroy failed");
- return 1;
- }
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
-
- /* Just to be sure we don't hang forever. */
- alarm (4);
-
-#define N 30
- for (cnt = 0; cnt < N; ++cnt)
- {
- int e;
-
- e = pthread_barrier_wait (b);
- if (e == PTHREAD_BARRIER_SERIAL_THREAD)
- ++serials;
- else if (e != 0)
- {
- printf ("%s: barrier_wait returned value %d != 0 and PTHREAD_BARRIER_SERIAL_THREAD\n",
- pid == 0 ? "child" : "parent", e);
- return 1;
- }
- }
-
- alarm (0);
-
- printf ("%s: was %d times the serial thread\n",
- pid == 0 ? "child" : "parent", serials);
-
- if (pid == 0)
- /* The child. Pass the number of times we had the serializing
- thread back to the parent. */
- exit (serials);
-
- if (waitpid (pid, &status, 0) != pid)
- {
- puts ("waitpid failed");
- return 1;
- }
-
- if (!WIFEXITED (status))
- {
- puts ("child exited abnormally");
- return 1;
- }
-
- if (WEXITSTATUS (status) + serials != N)
- {
- printf ("total number of serials is %d, expected %d\n",
- WEXITSTATUS (status) + serials, N);
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-barrier3.c b/test/nptl/tst-barrier3.c
deleted file mode 100644
index 9c4e2b25f..000000000
--- a/test/nptl/tst-barrier3.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Test of POSIX barriers. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define NTHREADS 20
-
-#define ROUNDS 20
-
-static pthread_barrier_t barriers[NTHREADS];
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-static int counters[NTHREADS];
-static int serial[NTHREADS];
-
-static void *
-worker (void *arg)
-{
- void *result = NULL;
- int nr = (long int) arg;
- int i;
-
- for (i = 0; i < ROUNDS; ++i)
- {
- int j;
- int retval;
-
- if (nr == 0)
- {
- memset (counters, '\0', sizeof (counters));
- memset (serial, '\0', sizeof (serial));
- }
-
- retval = pthread_barrier_wait (&barriers[NTHREADS - 1]);
- if (retval != 0 && retval != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("thread %d failed to wait for all the others\n", nr);
- result = (void *) 1;
- }
-
- for (j = nr; j < NTHREADS; ++j)
- {
- /* Increment the counter for this round. */
- pthread_mutex_lock (&lock);
- ++counters[j];
- pthread_mutex_unlock (&lock);
-
- /* Wait for the rest. */
- retval = pthread_barrier_wait (&barriers[j]);
-
- /* Test the result. */
- if (nr == 0 && counters[j] != j + 1)
- {
- printf ("barrier in round %d released but count is %d\n",
- j, counters[j]);
- result = (void *) 1;
- }
-
- if (retval != 0)
- {
- if (retval != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("thread %d in round %d has nonzero return value != PTHREAD_BARRIER_SERIAL_THREAD\n",
- nr, j);
- result = (void *) 1;
- }
- else
- {
- pthread_mutex_lock (&lock);
- ++serial[j];
- pthread_mutex_unlock (&lock);
- }
- }
-
- /* Wait for the rest again. */
- retval = pthread_barrier_wait (&barriers[j]);
-
- /* Now we can check whether exactly one thread was serializing. */
- if (nr == 0 && serial[j] != 1)
- {
- printf ("not exactly one serial thread in round %d\n", j);
- result = (void *) 1;
- }
- }
- }
-
- return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 60
-static int
-do_test (void)
-{
- pthread_t threads[NTHREADS];
- int i;
- void *res;
- int result = 0;
-
- /* Initialized the barrier variables. */
- for (i = 0; i < NTHREADS; ++i)
- if (pthread_barrier_init (&barriers[i], NULL, i + 1) != 0)
- {
- printf ("Failed to initialize barrier %d\n", i);
- exit (1);
- }
-
- /* Start the threads. */
- for (i = 0; i < NTHREADS; ++i)
- if (pthread_create (&threads[i], NULL, worker, (void *) (long int) i) != 0)
- {
- printf ("Failed to start thread %d\n", i);
- exit (1);
- }
-
- /* And wait for them. */
- for (i = 0; i < NTHREADS; ++i)
- if (pthread_join (threads[i], &res) != 0 || res != NULL)
- {
- printf ("thread %d returned a failure\n", i);
- result = 1;
- }
- else
- printf ("joined threads %d\n", i);
-
- if (result == 0)
- puts ("all OK");
-
- return result;
-}
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-barrier4.c b/test/nptl/tst-barrier4.c
deleted file mode 100644
index cad9fb727..000000000
--- a/test/nptl/tst-barrier4.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This is a test for behavior not guaranteed by POSIX. */
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_barrier_t b1;
-static pthread_barrier_t b2;
-
-
-#define N 20
-
-static void *
-tf (void *arg)
-{
- int round = 0;
-
- while (round++ < 30)
- {
- if (pthread_barrier_wait (&b1) == PTHREAD_BARRIER_SERIAL_THREAD)
- {
- pthread_barrier_destroy (&b1);
- if (pthread_barrier_init (&b1, NULL, N) != 0)
- {
- puts ("tf: 1st barrier_init failed");
- exit (1);
- }
- }
-
- if (pthread_barrier_wait (&b2) == PTHREAD_BARRIER_SERIAL_THREAD)
- {
- pthread_barrier_destroy (&b2);
- if (pthread_barrier_init (&b2, NULL, N) != 0)
- {
- puts ("tf: 2nd barrier_init failed");
- exit (1);
- }
- }
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_attr_t at;
- int cnt;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- if (pthread_barrier_init (&b1, NULL, N) != 0)
- {
- puts ("1st barrier_init failed");
- return 1;
- }
-
- if (pthread_barrier_init (&b2, NULL, N) != 0)
- {
- puts ("2nd barrier_init failed");
- return 1;
- }
-
- pthread_t th[N - 1];
- for (cnt = 0; cnt < N - 1; ++cnt)
- if (pthread_create (&th[cnt], &at, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- tf (NULL);
-
- for (cnt = 0; cnt < N - 1; ++cnt)
- if (pthread_join (th[cnt], NULL) != 0)
- {
- puts ("pthread_join failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-basic1.c b/test/nptl/tst-basic1.c
deleted file mode 100644
index 748bbb7f0..000000000
--- a/test/nptl/tst-basic1.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-
-static pid_t pid;
-
-static void *
-tf (void *a)
-{
- if (getpid () != pid)
- {
- write (2, "pid mismatch\n", 13);
- _exit (1);
- }
-
- return a;
-}
-
-
-int
-do_test (void)
-{
- pid = getpid ();
-
-#define N 2
- pthread_t t[N];
- int i;
-
- for (i = 0; i < N; ++i)
- if (pthread_create (&t[i], NULL, tf, (void *) (long int) (i + 1)) != 0)
- {
- write (2, "create failed\n", 14);
- _exit (1);
- }
- else
- printf ("created thread %d\n", i);
-
- for (i = 0; i < N; ++i)
- {
- void *r;
- int e;
- if ((e = pthread_join (t[i], &r)) != 0)
- {
- printf ("join failed: %d\n", e);
- _exit (1);
- }
- else if (r != (void *) (long int) (i + 1))
- {
- write (2, "result wrong\n", 13);
- _exit (1);
- }
- else
- printf ("joined thread %d\n", i);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-basic2.c b/test/nptl/tst-basic2.c
deleted file mode 100644
index 58ed6ac53..000000000
--- a/test/nptl/tst-basic2.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-#define N 20
-
-static pthread_t th[N];
-static pthread_mutex_t lock[N];
-
-
-static void *tf (void *a)
-{
- uintptr_t idx = (uintptr_t) a;
-
- pthread_mutex_lock (&lock[idx]);
-
- return pthread_equal (pthread_self (), th[idx]) ? NULL : (void *) 1l;
-}
-
-
-int
-do_test (void)
-{
- if (pthread_equal (pthread_self (), pthread_self ()) == 0)
- {
- puts ("pthread_equal (pthread_self (), pthread_self ()) failed");
- exit (1);
- }
-
- pthread_attr_t at;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- int i;
- for (i = 0; i < N; ++i)
- {
- if (pthread_mutex_init (&lock[i], NULL) != 0)
- {
- puts ("mutex_init failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&lock[i]) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- if (pthread_create (&th[i], &at, tf, (void *) (long int) i) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&lock[i]) != 0)
- {
- puts ("mutex_unlock failed");
- exit (1);
- }
-
- printf ("created thread %d\n", i);
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- int result = 0;
- for (i = 0; i < N; ++i)
- {
- void *r;
- int e;
- if ((e = pthread_join (th[i], &r)) != 0)
- {
- printf ("join failed: %d\n", e);
- _exit (1);
- }
- else if (r != NULL)
- result = 1;
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-basic3.c b/test/nptl/tst-basic3.c
deleted file mode 100644
index a3e2603bd..000000000
--- a/test/nptl/tst-basic3.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static int nrunning = 1;
-
-
-static void
-final_test (void)
-{
- puts ("final_test has been called");
-
-#define THE_SIGNAL SIGUSR1
- kill (getpid (), SIGUSR1);
-}
-
-
-static void *
-tf (void *a)
-{
- if (pthread_join ((pthread_t) a, NULL) != 0)
- {
- printf ("join failed while %d are running\n", nrunning);
- _exit (1);
- }
-
- printf ("%2d left\n", --nrunning);
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
-#define N 20
- pthread_t t[N];
- pthread_t last = pthread_self ();
- int i;
-
- atexit (final_test);
-
- printf ("starting %d + 1 threads\n", N);
- for (i = 0; i < N; ++i)
- {
- if (pthread_create (&t[i], NULL, tf, (void *) last) != 0)
- {
- puts ("create failed");
- _exit (1);
- }
-
- ++nrunning;
-
- last = t[i];
- }
-
- printf ("%2d left\n", --nrunning);
-
- pthread_exit (NULL);
-}
-
-
-#define EXPECTED_SIGNAL THE_SIGNAL
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-basic4.c b/test/nptl/tst-basic4.c
deleted file mode 100644
index b69ca200b..000000000
--- a/test/nptl/tst-basic4.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static void
-final_test (void)
-{
- puts ("final_test has been called");
-
-#define THE_SIGNAL SIGUSR1
- kill (getpid (), SIGUSR1);
-}
-
-
-static void *
-tf (void *a)
-{
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- atexit (final_test);
-
- pthread_exit (NULL);
- }
-
- int r;
- int e = TEMP_FAILURE_RETRY (waitpid (pid, &r, 0));
- if (e != pid)
- {
- puts ("waitpid failed");
- exit (1);
- }
-
- if (! WIFSIGNALED (r))
- {
- puts ("child not signled");
- exit (1);
- }
-
- if (WTERMSIG (r) != THE_SIGNAL)
- {
- puts ("child's termination signal wrong");
- exit (1);
- }
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- _exit (1);
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-basic5.c b/test/nptl/tst-basic5.c
deleted file mode 100644
index 76b59096e..000000000
--- a/test/nptl/tst-basic5.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-
-int
-do_test (void)
-{
- int c = pthread_getconcurrency ();
- if (c != 0)
- {
- puts ("initial concurrencylevel wrong");
- exit (1);
- }
-
- if (pthread_setconcurrency (1) != 0)
- {
- puts ("setconcurrency failed");
- exit (1);
- }
-
- c = pthread_getconcurrency ();
- if (c != 1)
- {
- puts ("getconcurrency didn't return the value previous set");
- exit (1);
- }
-
- int e = pthread_setconcurrency (-1);
- if (e == 0)
- {
- puts ("setconcurrency of negative value didn't failed");
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("setconcurrency didn't return EINVAL for negative value");
- exit (1);
- }
-
- c = pthread_getconcurrency ();
- if (c != 1)
- {
- puts ("invalid getconcurrency changed level");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-basic6.c b/test/nptl/tst-basic6.c
deleted file mode 100644
index 91e5fe2c7..000000000
--- a/test/nptl/tst-basic6.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static char *p;
-
-static pthread_barrier_t b;
-#define BT \
- e = pthread_barrier_wait (&b); \
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD) \
- { \
- puts ("barrier_wait failed"); \
- exit (1); \
- }
-
-
-static void *
-tf (void *a)
-{
- int e;
-
- BT;
-
- char *p2 = getcwd (NULL, 0);
- if (p2 == NULL)
- {
- puts ("2nd getcwd failed");
- exit (1);
- }
-
- if (strcmp (p, p2) != 0)
- {
- printf ("initial cwd mismatch: \"%s\" vs \"%s\"\n", p, p2);
- exit (1);
- }
-
- free (p);
- free (p2);
-
- if (chdir ("..") != 0)
- {
- puts ("chdir failed");
- exit (1);
- }
-
- p = getcwd (NULL, 0);
- if (p == NULL)
- {
- puts ("getcwd failed");
- exit (1);
- }
-
- return a;
-}
-
-
-int
-do_test (void)
-{
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- p = getcwd (NULL, 0);
- if (p == NULL)
- {
- puts ("getcwd failed");
- exit (1);
- }
-
- int e;
- BT;
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- char *p2 = getcwd (NULL, 0);
- if (p2 == NULL)
- {
- puts ("2nd getcwd failed");
- exit (1);
- }
-
- if (strcmp (p, p2) != 0)
- {
- printf ("cwd after chdir mismatch: \"%s\" vs \"%s\"\n", p, p2);
- exit (1);
- }
-
- free (p);
- free (p2);
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-basic7.c b/test/nptl/tst-basic7.c
deleted file mode 100644
index 15b618786..000000000
--- a/test/nptl/tst-basic7.c
+++ /dev/null
@@ -1,75 +0,0 @@
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <limits.h>
-#include <sys/mman.h>
-#include <sys/resource.h>
-
-static void use_stack (size_t needed);
-
-void (*use_stack_ptr) (size_t) = use_stack;
-
-static void
-use_stack (size_t needed)
-{
- size_t sz = sysconf (_SC_PAGESIZE);
- char *buf = alloca (sz);
- memset (buf, '\0', sz);
-
- if (needed > sz)
- use_stack_ptr (needed - sz);
-}
-
-static void
-use_up_memory (void)
-{
- struct rlimit rl;
- getrlimit (RLIMIT_AS, &rl);
- rl.rlim_cur = 10 * 1024 * 1024;
- setrlimit (RLIMIT_AS, &rl);
-
- char *c;
- int PAGESIZE = getpagesize ();
- while (1)
- {
- c = mmap (NULL, PAGESIZE, PROT_NONE, MAP_ANON | MAP_PRIVATE, -1, 0);
- if (c == MAP_FAILED)
- break;
- }
-}
-
-static void *
-child (void *arg)
-{
- sleep (1);
- return arg;
-}
-
-static int
-do_test (void)
-{
- int err;
- pthread_t tid;
-
- /* Allocate the memory needed for the stack. */
- use_stack_ptr (PTHREAD_STACK_MIN);
-
- use_up_memory ();
-
- err = pthread_create (&tid, NULL, child, NULL);
- if (err != 0)
- {
- printf ("pthread_create returns %d: %s\n", err,
- err == EAGAIN ? "OK" : "FAIL");
- return err != EAGAIN;
- }
-
- /* We did not fail to allocate memory despite the preparation. Oh well. */
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel1.c b/test/nptl/tst-cancel1.c
deleted file mode 100644
index 8b2ca07b1..000000000
--- a/test/nptl/tst-cancel1.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
-
-static int cntr;
-
-
-static void
-cleanup (void *arg)
-{
- if (arg != (void *) 42l)
- cntr = 42;
- else
- cntr = 1;
-}
-
-
-static void *
-tf (void *arg)
-{
- /* Ignore all signals. This must not have any effect on delivering
- the cancellation signal. */
- sigset_t ss;
-
- sigfillset (&ss);
-
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("pthread_sigmask failed");
- exit (1);
- }
-
- pthread_cleanup_push (cleanup, (void *) 42l);
-
- int err = pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
- if (err != 0)
- {
- printf ("setcanceltype failed: %s\n", strerror (err));
- exit (1);
- }
- /* The following code is not standard compliant: the mutex functions
- must not be called with asynchronous cancellation enabled. */
-
- err = pthread_mutex_unlock (&m2);
- if (err != 0)
- {
- printf ("child: mutex_unlock failed: %s\n", strerror (err));
- exit (1);
- }
-
- err = pthread_mutex_lock (&m1);
- if (err != 0)
- {
- printf ("child: 1st mutex_lock failed: %s\n", strerror (err));
- exit (1);
- }
-
- /* We should never come here. */
-
- pthread_cleanup_pop (0);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- int err;
- pthread_t th;
- int result = 0;
- void *retval;
-
- /* Get the mutexes. */
- err = pthread_mutex_lock (&m1);
- if (err != 0)
- {
- printf ("parent: 1st mutex_lock failed: %s\n", strerror (err));
- return 1;
- }
- err = pthread_mutex_lock (&m2);
- if (err != 0)
- {
- printf ("parent: 2nd mutex_lock failed: %s\n", strerror (err));
- return 1;
- }
-
- err = pthread_create (&th, NULL, tf, NULL);
- if (err != 0)
- {
- printf ("create failed: %s\n", strerror (err));
- return 1;
- }
-
- err = pthread_mutex_lock (&m2);
- if (err != 0)
- {
- printf ("parent: 3rd mutex_lock failed: %s\n", strerror (err));
- return 1;
- }
-
- err = pthread_cancel (th);
- if (err != 0)
- {
- printf ("cancel failed: %s\n", strerror (err));
- return 1;
- }
-
- err = pthread_join (th, &retval);
- if (err != 0)
- {
- printf ("join failed: %s\n", strerror (err));
- return 1;
- }
-
- if (retval != PTHREAD_CANCELED)
- {
- printf ("wrong return value: %p\n", retval);
- result = 1;
- }
-
- if (cntr == 42)
- {
- puts ("cleanup handler called with wrong argument");
- result = 1;
- }
- else if (cntr != 1)
- {
- puts ("cleanup handling not called");
- result = 1;
- }
-
- return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel10.c b/test/nptl/tst-cancel10.c
deleted file mode 100644
index 534ddf439..000000000
--- a/test/nptl/tst-cancel10.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-static void
-cleanup (void *arg)
-{
- /* Just for fun. */
- if (pthread_cancel (pthread_self ()) != 0)
- {
- puts ("cleanup: cancel failed");
- exit (1);
- }
-
- printf ("cleanup for %ld\n", (long int) arg);
-}
-
-
-static void *
-tf (void *arg)
-{
- long int n = (long int) arg;
-
- pthread_cleanup_push (cleanup, arg);
-
- if (pthread_setcanceltype ((n & 1) == 0
- ? PTHREAD_CANCEL_DEFERRED
- : PTHREAD_CANCEL_ASYNCHRONOUS, NULL) != 0)
- {
- puts ("setcanceltype failed");
- exit (1);
- }
-
- if (pthread_cancel (pthread_self ()) != 0)
- {
- puts ("cancel failed");
- exit (1);
- }
-
- pthread_testcancel ();
-
- /* We should never come here. */
-
- pthread_cleanup_pop (0);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_attr_t at;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
-#define N 20
- int i;
- pthread_t th[N];
-
- for (i = 0; i < N; ++i)
- if (pthread_create (&th[i], &at, tf, (void *) (long int) i) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- for (i = 0; i < N; ++i)
- {
- void *r;
- if (pthread_join (th[i], &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel11.c b/test/nptl/tst-cancel11.c
deleted file mode 100644
index c09158237..000000000
--- a/test/nptl/tst-cancel11.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static pthread_barrier_t bar;
-static int fd[2];
-
-
-static void
-cleanup (void *arg)
-{
- static int ncall;
-
- if (++ncall != 1)
- {
- puts ("second call to cleanup");
- exit (1);
- }
-
- printf ("cleanup call #%d\n", ncall);
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_cleanup_push (cleanup, NULL);
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: 1st barrier_wait failed");
- exit (1);
- }
-
- /* This call should block and be cancelable. */
- char buf[20];
- read (fd[0], buf, sizeof (buf));
-
- pthread_cleanup_pop (0);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (pipe (fd) != 0)
- {
- puts ("pipe failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- exit (1);
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("1st cancel failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel12.c b/test/nptl/tst-cancel12.c
deleted file mode 100644
index 8b3faa607..000000000
--- a/test/nptl/tst-cancel12.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static pthread_barrier_t bar;
-static sem_t sem;
-
-
-static void
-cleanup (void *arg)
-{
- static int ncall;
-
- if (++ncall != 1)
- {
- puts ("second call to cleanup");
- exit (1);
- }
-
- printf ("cleanup call #%d\n", ncall);
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_cleanup_push (cleanup, NULL);
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: 1st barrier_wait failed");
- exit (1);
- }
-
- /* This call should block and be cancelable. */
- sem_wait (&sem);
-
- pthread_cleanup_pop (0);
-
- puts ("sem_wait returned");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (sem_init (&sem, 0, 1) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- /* Check whether cancellation is honored even before sem_wait does
- anything. */
- if (pthread_cancel (th) != 0)
- {
- puts ("1st cancel failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel13.c b/test/nptl/tst-cancel13.c
deleted file mode 100644
index cf3ce20f5..000000000
--- a/test/nptl/tst-cancel13.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static pthread_barrier_t bar;
-static sem_t sem;
-
-
-static void
-cleanup (void *arg)
-{
- static int ncall;
-
- if (++ncall != 1)
- {
- puts ("second call to cleanup");
- exit (1);
- }
-
- printf ("cleanup call #%d\n", ncall);
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_cleanup_push (cleanup, NULL);
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: 1st barrier_wait failed");
- exit (1);
- }
-
- /* This call should block and be cancelable. */
- sem_wait (&sem);
-
- pthread_cleanup_pop (0);
-
- puts ("sem_wait returned");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (sem_init (&sem, 0, 0) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- exit (1);
- }
-
- /* Give the child a chance to go to sleep in sem_wait. */
- sleep (1);
-
- /* Check whether cancellation is honored when waiting in sem_wait. */
- if (pthread_cancel (th) != 0)
- {
- puts ("1st cancel failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel14.c b/test/nptl/tst-cancel14.c
deleted file mode 100644
index defbbdd84..000000000
--- a/test/nptl/tst-cancel14.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-static pthread_barrier_t bar;
-static sem_t sem;
-
-
-static void
-cleanup (void *arg)
-{
- static int ncall;
-
- if (++ncall != 1)
- {
- puts ("second call to cleanup");
- exit (1);
- }
-
- printf ("cleanup call #%d\n", ncall);
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_cleanup_push (cleanup, NULL);
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: 1st barrier_wait failed");
- exit (1);
- }
-
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
-
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- /* Timeout in 5 seconds. */
- ts.tv_sec += 5;
-
- /* This call should block and be cancelable. */
- sem_timedwait (&sem, &ts);
-
- pthread_cleanup_pop (0);
-
- puts ("sem_timedwait returned");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (sem_init (&sem, 0, 1) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- /* Check whether cancellation is honored even before sem_timedwait does
- anything. */
- if (pthread_cancel (th) != 0)
- {
- puts ("1st cancel failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel15.c b/test/nptl/tst-cancel15.c
deleted file mode 100644
index eb2d713e6..000000000
--- a/test/nptl/tst-cancel15.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-static pthread_barrier_t bar;
-static sem_t sem;
-
-
-static void
-cleanup (void *arg)
-{
- static int ncall;
-
- if (++ncall != 1)
- {
- puts ("second call to cleanup");
- exit (1);
- }
-
- printf ("cleanup call #%d\n", ncall);
-}
-
-
-static void *
-tf (void *arg)
-{
- int e;
-
- pthread_cleanup_push (cleanup, NULL);
-
- e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: 1st barrier_wait failed");
- exit (1);
- }
-
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
-
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- /* Timeout in 5 seconds. */
- ts.tv_sec += 5;
-
- /* This call should block and be cancelable. */
- errno = 0;
- e = sem_timedwait (&sem, &ts);
-
- pthread_cleanup_pop (0);
-
- printf ("sem_timedwait returned, e = %d, errno = %d\n", e, errno);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (sem_init (&sem, 0, 0) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- exit (1);
- }
-
- /* Give the child a chance to go to sleep in sem_wait. */
- sleep (1);
-
- /* Check whether cancellation is honored when waiting in sem_timedwait. */
- if (pthread_cancel (th) != 0)
- {
- puts ("1st cancel failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel16.c b/test/nptl/tst-cancel16.c
deleted file mode 100644
index 6af657c47..000000000
--- a/test/nptl/tst-cancel16.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static pthread_barrier_t b2;
-static int fd;
-static int called;
-
-
-static void
-cl (void *arg)
-{
- called = 1;
-}
-
-
-static void *
-tf (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child thread: barrier_wait failed");
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- /* This call should never return. */
- (void) lockf (fd, F_LOCK, 0);
-
- pthread_cleanup_pop (0);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- char fname[] = "/tmp/cancel16XXXXXX";
- fd = mkstemp (fname);
- if (fd == -1)
- {
- puts ("mkstemp failed");
- return 1;
- }
- unlink (fname);
-
- char mem[sizeof (pthread_barrier_t)];
- memset (mem, '\0', sizeof (mem));
- if (TEMP_FAILURE_RETRY (pwrite (fd, mem, sizeof (mem), 0)) != sizeof (mem))
- {
- puts ("pwrite failed");
- return 1;
- }
-
- void *p = mmap (NULL, sizeof (mem), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
- if (p == MAP_FAILED)
- {
- puts ("mmap failed");
- return 1;
- }
- pthread_barrier_t *b = (pthread_barrier_t *) p;
-
- pthread_barrierattr_t ba;
- if (pthread_barrierattr_init (&ba) != 0)
- {
- puts ("barrierattr_init failed");
- return 1;
- }
- if (pthread_barrierattr_setpshared (&ba, 1) != 0)
- {
- puts ("barrierattr_setshared failed");
- return 1;
- }
-
- if (pthread_barrier_init (b, &ba, 2) != 0)
- {
- puts ("1st barrier_init failed");
- return 1;
- }
- if (pthread_barrierattr_destroy (&ba) != 0)
- {
- puts ("barrier_destroy failed");
- return 1;
- }
-
- pid_t pid = fork ();
- if (pid == 0)
- {
- /* Child. Lock the file and wait. */
- if (lockf (fd, F_LOCK, 0) != 0)
- {
- puts ("child process: lockf failed");
- _exit (1);
- }
-
- int r = pthread_barrier_wait (b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child process: 1st barrier_wait failed");
- _exit (1);
- }
-
- /* Make sure the process dies. */
- alarm (5);
-
- r = pthread_barrier_wait (b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child process: 2nd barrier_wait failed");
- _exit (1);
- }
-
- _exit (0);
- }
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("main: 1st barrier_wait failed");
- _exit (1);
- }
-
- if (pthread_barrier_init (&b2, NULL, 2) != 0)
- {
- puts ("2nd barrier_init failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("main: 2nd barrier_wait failed");
- return 1;
- }
-
- /* Delay. */
- sleep (1);
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
-
- void *result;
- if (pthread_join (th, &result) != 0)
- {
- puts ("join failed");
- return 1;
- }
- if (result != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- return 1;
- }
- if (called == 0)
- {
- puts ("cleanup handler not called");
- return 1;
- }
-
- r = pthread_barrier_wait (b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("main: 3rd barrier_wait failed");
- return 1;
- }
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("waitpid failed");
- return 1;
- }
- if (WEXITSTATUS (status) != 0)
- {
- printf ("child process exits with %d\n", WEXITSTATUS (status));
- return 1;
- }
-
- if (lockf (fd, F_LOCK, 0) != 0)
- {
- puts ("main: lockf failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel18.c b/test/nptl/tst-cancel18.c
deleted file mode 100644
index e653119d6..000000000
--- a/test/nptl/tst-cancel18.c
+++ /dev/null
@@ -1,173 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-
-
-static pthread_barrier_t b;
-
-
-/* Cleanup handling test. */
-static int cl_called;
-
-static void
-cl (void *arg)
-{
- ++cl_called;
-}
-
-
-static void *
-tf (void *arg)
-{
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- struct timespec ts = { .tv_sec = arg == NULL ? 10000000 : 0, .tv_nsec = 0 };
- TEMP_FAILURE_RETRY (clock_nanosleep (CLOCK_REALTIME, 0, &ts, &ts));
-
- pthread_cleanup_pop (0);
-
- puts ("clock_nanosleep returned");
-
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("1st create failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- while (nanosleep (&ts, &ts) != 0)
- continue;
-
- puts ("going to cancel in-time");
- if (pthread_cancel (th) != 0)
- {
- puts ("1st cancel failed");
- return 1;
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- puts ("1st join failed");
- return 1;
- }
- if (status != PTHREAD_CANCELED)
- {
- puts ("1st thread not canceled");
- return 1;
- }
-
- if (cl_called == 0)
- {
- puts ("cleanup handler not called");
- return 1;
- }
- if (cl_called > 1)
- {
- puts ("cleanup handler called more than once");
- return 1;
- }
-
- puts ("in-time cancellation succeeded");
-
-
- cl_called = 0;
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("2nd create failed");
- return 1;
- }
-
- puts ("going to cancel early");
- if (pthread_cancel (th) != 0)
- {
- puts ("2nd cancel failed");
- return 1;
- }
-
- r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- if (pthread_join (th, &status) != 0)
- {
- puts ("2nd join failed");
- return 1;
- }
- if (status != PTHREAD_CANCELED)
- {
- puts ("2nd thread not canceled");
- return 1;
- }
-
- if (cl_called == 0)
- {
- printf ("cleanup handler not called\n");
- return 1;
- }
- if (cl_called > 1)
- {
- printf ("cleanup handler called more than once\n");
- return 1;
- }
-
- puts ("early cancellation succeeded");
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel19.c b/test/nptl/tst-cancel19.c
deleted file mode 100644
index 921df3f9d..000000000
--- a/test/nptl/tst-cancel19.c
+++ /dev/null
@@ -1,286 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <error.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/select.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-static void *
-tf (void *arg)
-{
- return NULL;
-}
-
-static void
-handler (int sig)
-{
-}
-
-static void __attribute__ ((noinline))
-clobber_lots_of_regs (void)
-{
-#define X1(n) long r##n = 10##n; __asm__ __volatile__ ("" : "+r" (r##n));
-#define X2(n) X1(n##0) X1(n##1) X1(n##2) X1(n##3) X1(n##4)
-#define X3(n) X2(n##0) X2(n##1) X2(n##2) X2(n##3) X2(n##4)
- X3(0) X3(1) X3(2) X3(3) X3(4)
-#undef X1
-#define X1(n) __asm__ __volatile__ ("" : : "r" (r##n));
- X3(0) X3(1) X3(2) X3(3) X3(4)
-#undef X1
-#undef X2
-#undef X3
-}
-
-static int
-do_test (void)
-{
- pthread_t th;
- int old, rc;
- int ret = 0;
- int fd[2];
-
- rc = pipe (fd);
- if (rc < 0)
- error (EXIT_FAILURE, errno, "couldn't create pipe");
-
- rc = pthread_create (&th, NULL, tf, NULL);
- if (rc)
- error (EXIT_FAILURE, rc, "couldn't create thread");
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &old);
- if (rc)
- {
- error (0, rc, "1st pthread_setcanceltype failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_DEFERRED && old != PTHREAD_CANCEL_ASYNCHRONOUS)
- {
- error (0, 0, "1st pthread_setcanceltype returned invalid value %d",
- old);
- ret = 1;
- }
-
- clobber_lots_of_regs ();
- close (fd[0]);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after close failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_DEFERRED)
- {
- error (0, 0, "pthread_setcanceltype after close returned invalid value %d",
- old);
- ret = 1;
- }
-
- clobber_lots_of_regs ();
- close (fd[1]);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after 2nd close failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_ASYNCHRONOUS)
- {
- error (0, 0, "pthread_setcanceltype after 2nd close returned invalid value %d",
- old);
- ret = 1;
- }
-
- struct sigaction sa = { .sa_handler = handler, .sa_flags = 0 };
- sigemptyset (&sa.sa_mask);
- sigaction (SIGALRM, &sa, NULL);
-
- struct itimerval it;
- it.it_value.tv_sec = 1;
- it.it_value.tv_usec = 0;
- it.it_interval = it.it_value;
- setitimer (ITIMER_REAL, &it, NULL);
-
- clobber_lots_of_regs ();
- pause ();
-
- memset (&it, 0, sizeof (it));
- setitimer (ITIMER_REAL, &it, NULL);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after pause failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_DEFERRED)
- {
- error (0, 0, "pthread_setcanceltype after pause returned invalid value %d",
- old);
- ret = 1;
- }
-
- it.it_value.tv_sec = 1;
- it.it_value.tv_usec = 0;
- it.it_interval = it.it_value;
- setitimer (ITIMER_REAL, &it, NULL);
-
- clobber_lots_of_regs ();
- pause ();
-
- memset (&it, 0, sizeof (it));
- setitimer (ITIMER_REAL, &it, NULL);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after 2nd pause failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_ASYNCHRONOUS)
- {
- error (0, 0, "pthread_setcanceltype after 2nd pause returned invalid value %d",
- old);
- ret = 1;
- }
-
- char fname[] = "/tmp/tst-cancel19-dir-XXXXXX\0foo/bar";
- char *enddir = strchr (fname, '\0');
- if (mkdtemp (fname) == NULL)
- {
- error (0, errno, "mkdtemp failed");
- ret = 1;
- }
- *enddir = '/';
-
- clobber_lots_of_regs ();
- creat (fname, 0400);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after creat failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_DEFERRED)
- {
- error (0, 0, "pthread_setcanceltype after creat returned invalid value %d",
- old);
- ret = 1;
- }
-
- clobber_lots_of_regs ();
- creat (fname, 0400);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after 2nd creat failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_ASYNCHRONOUS)
- {
- error (0, 0, "pthread_setcanceltype after 2nd creat returned invalid value %d",
- old);
- ret = 1;
- }
-
- clobber_lots_of_regs ();
- open (fname, O_CREAT, 0400);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after open failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_DEFERRED)
- {
- error (0, 0, "pthread_setcanceltype after open returned invalid value %d",
- old);
- ret = 1;
- }
-
- clobber_lots_of_regs ();
- open (fname, O_CREAT, 0400);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after 2nd open failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_ASYNCHRONOUS)
- {
- error (0, 0, "pthread_setcanceltype after 2nd open returned invalid value %d",
- old);
- ret = 1;
- }
-
- *enddir = '\0';
- rmdir (fname);
-
- clobber_lots_of_regs ();
- select (-1, NULL, NULL, NULL, NULL);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after select failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_DEFERRED)
- {
- error (0, 0, "pthread_setcanceltype after select returned invalid value %d",
- old);
- ret = 1;
- }
-
- clobber_lots_of_regs ();
- select (-1, NULL, NULL, NULL, NULL);
-
- rc = pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &old);
- if (rc)
- {
- error (0, rc, "pthread_setcanceltype after 2nd select failed");
- ret = 1;
- }
- if (old != PTHREAD_CANCEL_ASYNCHRONOUS)
- {
- error (0, 0, "pthread_setcanceltype after 2nd select returned invalid value %d",
- old);
- ret = 1;
- }
-
- pthread_join (th, NULL);
-
- return ret;
-}
-
-#define TIMEOUT 20
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel2.c b/test/nptl/tst-cancel2.c
deleted file mode 100644
index 45c9e8ea9..000000000
--- a/test/nptl/tst-cancel2.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int fd[2];
-
-
-static void *
-tf (void *arg)
-{
- /* The buffer size must be larger than the pipe size so that the
- write blocks. */
- char buf[100000];
-
- if (write (fd[1], buf, sizeof (buf)) == sizeof (buf))
- {
- puts ("write succeeded");
- return (void *) 1l;
- }
-
- return (void *) 42l;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
- void *r;
- struct sigaction sa;
-
- sa.sa_handler = SIG_IGN;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
-
- if (sigaction (SIGPIPE, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- if (pipe (fd) != 0)
- {
- puts ("pipe failed");
- return 1;
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
-
- /* This will cause the write in the child to return. */
- close (fd[0]);
-
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (r != PTHREAD_CANCELED)
- {
- printf ("result is wrong: expected %p, got %p\n", PTHREAD_CANCELED, r);
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel20.c b/test/nptl/tst-cancel20.c
deleted file mode 100644
index 7e9199fe5..000000000
--- a/test/nptl/tst-cancel20.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static int fd[4];
-static pthread_barrier_t b;
-volatile int in_sh_body;
-unsigned long cleanups;
-
-static void
-cl (void *arg)
-{
- cleanups = (cleanups << 4) | (long) arg;
-}
-
-
-static void __attribute__((noinline))
-sh_body (void)
-{
- char c;
-
- pthread_cleanup_push (cl, (void *) 1L);
-
- in_sh_body = 1;
- if (read (fd[2], &c, 1) == 1)
- {
- puts ("read succeeded");
- exit (1);
- }
-
- pthread_cleanup_pop (0);
-}
-
-
-static void
-sh (int sig)
-{
- pthread_cleanup_push (cl, (void *) 2L);
- sh_body ();
- in_sh_body = 0;
-
- pthread_cleanup_pop (0);
-}
-
-
-static void __attribute__((noinline))
-tf_body (void)
-{
- char c;
-
- pthread_cleanup_push (cl, (void *) 3L);
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child thread: barrier_wait failed");
- exit (1);
- }
-
- if (read (fd[0], &c, 1) == 1)
- {
- puts ("read succeeded");
- exit (1);
- }
-
- read (fd[0], &c, 1);
-
- pthread_cleanup_pop (0);
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_cleanup_push (cl, (void *) 4L);
- tf_body ();
- pthread_cleanup_pop (0);
- return NULL;
-}
-
-
-static int
-do_one_test (void)
-{
- in_sh_body = 0;
- cleanups = 0;
- if (pipe (fd) != 0 || pipe (fd + 2) != 0)
- {
- puts ("pipe failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent thread: barrier_wait failed");
- return 1;
- }
-
- sleep (1);
-
- r = pthread_kill (th, SIGHUP);
- if (r)
- {
- errno = r;
- printf ("pthread_kill failed %m\n");
- return 1;
- }
-
- while (in_sh_body == 0)
- sleep (1);
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
-
- /* This will cause the read in the child to return. */
- close (fd[0]);
- close (fd[1]);
- close (fd[2]);
- close (fd[3]);
-
- void *ret;
- if (pthread_join (th, &ret) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (ret != PTHREAD_CANCELED)
- {
- puts ("result is wrong");
- return 1;
- }
-
- if (cleanups != 0x1234L)
- {
- printf ("called cleanups %lx\n", cleanups);
- return 1;
- }
-
- return 0;
-}
-
-
-static int
-do_test (void)
-{
- stack_t ss;
- ss.ss_sp = malloc (2 * SIGSTKSZ);
- if (ss.ss_sp == NULL)
- {
- puts ("failed to allocate alternate stack");
- return 1;
- }
- ss.ss_flags = 0;
- ss.ss_size = 2 * SIGSTKSZ;
- if (sigaltstack (&ss, NULL) < 0)
- {
- printf ("sigaltstack failed %m\n");
- return 1;
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- struct sigaction sa;
- sa.sa_handler = sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = 0 test");
- if (do_one_test ())
- return 1;
-
- sa.sa_handler = sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_ONSTACK;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = SA_ONSTACK test");
- if (do_one_test ())
- return 1;
-
- sa.sa_sigaction = (void (*)(int, siginfo_t *, void *)) sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = SA_SIGINFO test");
- if (do_one_test ())
- return 1;
-
- sa.sa_sigaction = (void (*)(int, siginfo_t *, void *)) sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = SA_SIGINFO|SA_ONSTACK test");
- if (do_one_test ())
- return 1;
-
- return 0;
-}
-
-#define TIMEOUT 40
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel21.c b/test/nptl/tst-cancel21.c
deleted file mode 100644
index 489c18ab0..000000000
--- a/test/nptl/tst-cancel21.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-
-static int fd[4];
-static pthread_barrier_t b;
-volatile int in_sh_body;
-unsigned long cleanups;
-
-static void
-cl (void *arg)
-{
- cleanups = (cleanups << 4) | (long) arg;
-}
-
-
-static void __attribute__((noinline))
-sh_body (void)
-{
- char c;
-
- pthread_cleanup_push (cl, (void *) 1L);
-
- in_sh_body = 1;
- if (read (fd[2], &c, 1) == 1)
- {
- puts ("read succeeded");
- exit (1);
- }
-
- pthread_cleanup_pop (0);
-}
-
-
-static void
-sh (int sig)
-{
- pthread_cleanup_push (cl, (void *) 2L);
- sh_body ();
- in_sh_body = 0;
-
- pthread_cleanup_pop (0);
-}
-
-
-static void __attribute__((noinline))
-tf_body (void)
-{
- char c;
-
- pthread_cleanup_push (cl, (void *) 3L);
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child thread: barrier_wait failed");
- exit (1);
- }
-
- if (read (fd[0], &c, 1) == 1)
- {
- puts ("read succeeded");
- exit (1);
- }
-
- read (fd[0], &c, 1);
-
- pthread_cleanup_pop (0);
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_t th = (pthread_t) arg;
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent thread: barrier_wait failed");
- exit (1);
- }
-
- sleep (1);
-
- r = pthread_kill (th, SIGHUP);
- if (r)
- {
- errno = r;
- printf ("pthread_kill failed %m\n");
- exit (1);
- }
-
- while (in_sh_body == 0)
- sleep (1);
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- exit (1);
- }
-
- /* This will cause the read in the initial thread to return. */
- close (fd[0]);
- close (fd[1]);
- close (fd[2]);
- close (fd[3]);
-
- void *ret;
- if (pthread_join (th, &ret) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (ret != PTHREAD_CANCELED)
- {
- puts ("result is wrong");
- exit (1);
- }
-
- if (cleanups != 0x1234L)
- {
- printf ("called cleanups %lx\n", cleanups);
- exit (1);
- }
-
- if (pthread_barrier_destroy (&b))
- {
- puts ("barrier destroy failed");
- exit (1);
- }
-
- exit (0);
-}
-
-
-static int
-do_one_test (void)
-{
- in_sh_body = 0;
-
- pid_t pid = fork ();
-
- if (pid == -1)
- {
- printf ("fork failed: %m\n");
- return 1;
- }
-
- if (pid)
- {
- int status;
- if (waitpid (pid, &status, 0) < 0)
- {
- printf ("waitpid failed %m\n");
- return 1;
- }
-
- return !WIFEXITED (status) || WEXITSTATUS (status);
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- cleanups = 0;
- if (pipe (fd) != 0 || pipe (fd + 2) != 0)
- {
- puts ("pipe failed");
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, (void *) pthread_self ()) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- pthread_cleanup_push (cl, (void *) 4L);
- tf_body ();
- pthread_cleanup_pop (0);
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- stack_t ss;
- ss.ss_sp = malloc (2 * SIGSTKSZ);
- if (ss.ss_sp == NULL)
- {
- puts ("failed to allocate alternate stack");
- return 1;
- }
- ss.ss_flags = 0;
- ss.ss_size = 2 * SIGSTKSZ;
- if (sigaltstack (&ss, NULL) < 0)
- {
- printf ("sigaltstack failed %m\n");
- return 1;
- }
-
- struct sigaction sa;
- sa.sa_handler = sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = 0 test");
- if (do_one_test ())
- return 1;
-
- sa.sa_handler = sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_ONSTACK;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = SA_ONSTACK test");
- if (do_one_test ())
- return 1;
-
- sa.sa_sigaction = (void (*)(int, siginfo_t *, void *)) sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = SA_SIGINFO test");
- if (do_one_test ())
- return 1;
-
- sa.sa_sigaction = (void (*)(int, siginfo_t *, void *)) sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
-
- if (sigaction (SIGHUP, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- puts ("sa_flags = SA_SIGINFO|SA_ONSTACK test");
- if (do_one_test ())
- return 1;
-
- return 0;
-}
-
-#define TIMEOUT 40
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel22.c b/test/nptl/tst-cancel22.c
deleted file mode 100644
index 8febbf0e1..000000000
--- a/test/nptl/tst-cancel22.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-pthread_barrier_t b;
-int seen;
-
-static void *
-tf (void *arg)
-{
- int i;
- int old;
- int r = pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &old);
- if (r != 0)
- {
- puts ("setcancelstate failed");
- exit (1);
- }
-
- r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- for (i = 0; i < 10; ++i)
- {
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- TEMP_FAILURE_RETRY (nanosleep (&ts, &ts));
- }
-
- seen = 1;
- pthread_setcancelstate (old, NULL);
-
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- TEMP_FAILURE_RETRY (nanosleep (&ts, &ts));
-
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier init failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("thread creation failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- puts ("join failed");
- return 1;
- }
- if (status != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- return 1;
- }
-
- if (pthread_barrier_destroy (&b) != 0)
- {
- puts ("barrier_destroy failed");
- return 1;
- }
-
- if (seen != 1)
- {
- puts ("thread cancelled when PTHREAD_CANCEL_DISABLED");
- return 1;
- }
-
- return 0;
-}
-
-#define TIMEOUT 5
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel23.c b/test/nptl/tst-cancel23.c
deleted file mode 100644
index 211168748..000000000
--- a/test/nptl/tst-cancel23.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel22.c"
diff --git a/test/nptl/tst-cancel25.c b/test/nptl/tst-cancel25.c
deleted file mode 100644
index 00b99ad55..000000000
--- a/test/nptl/tst-cancel25.c
+++ /dev/null
@@ -1,171 +0,0 @@
-#include <pthreadP.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_barrier_t b;
-static pthread_t th2;
-
-
-static void *
-tf2 (void *arg)
-{
- sigset_t mask;
- if (pthread_sigmask (SIG_SETMASK, NULL, &mask) != 0)
- {
- puts ("pthread_sigmask failed");
- exit (1);
- }
- if (sigismember (&mask, SIGCANCEL))
- {
- puts ("SIGCANCEL blocked in new thread");
- exit (1);
- }
-
- /* Sync with the main thread so that we do not test anything else. */
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- while (1)
- {
- /* Just a cancelable call. */
- struct timespec ts = { 10000, 0 };
- nanosleep (&ts, 0);
- }
-
- return NULL;
-}
-
-
-static void
-unwhand (void *arg)
-{
- if (pthread_create (&th2, NULL, tf2, NULL) != 0)
- {
- puts ("unwhand: create failed");
- exit (1);
- }
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_cleanup_push (unwhand, NULL);
-
- /* Sync with the main thread so that we do not test anything else. */
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- while (1)
- {
- /* Just a cancelable call. */
- struct timespec ts = { 10000, 0 };
- nanosleep (&ts, 0);
- }
-
- pthread_cleanup_pop (0);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- pthread_t th1;
- if (pthread_create (&th1, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- /* Make sure tf1 enters nanosleep. */
- struct timespec ts = { 0, 500000000 };
- while (nanosleep (&ts, &ts) != 0)
- ;
-
- if (pthread_cancel (th1) != 0)
- {
- puts ("1st cancel failed");
- return 1;
- }
-
- void *res;
- if (pthread_join (th1, &res) != 0)
- {
- puts ("1st join failed");
- return 1;
- }
- if (res != PTHREAD_CANCELED)
- {
- puts ("1st thread not canceled");
- return 1;
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- /* Make sure tf2 enters nanosleep. */
- ts.tv_sec = 0;
- ts.tv_nsec = 500000000;
- while (nanosleep (&ts, &ts) != 0)
- ;
-
- puts ("calling pthread_cancel the second time");
- if (pthread_cancel (th2) != 0)
- {
- puts ("2nd cancel failed");
- return 1;
- }
-
- puts ("calling pthread_join the second time");
- if (pthread_join (th2, &res) != 0)
- {
- puts ("2nd join failed");
- return 1;
- }
- if (res != PTHREAD_CANCELED)
- {
- puts ("2nd thread not canceled");
- return 1;
- }
-
- if (pthread_barrier_destroy (&b) != 0)
- {
- puts ("barrier_destroy failed");
- return 0;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 4
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel3.c b/test/nptl/tst-cancel3.c
deleted file mode 100644
index e1c111d29..000000000
--- a/test/nptl/tst-cancel3.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int fd[2];
-
-
-static void *
-tf (void *arg)
-{
- char buf[100];
-
- if (read (fd[0], buf, sizeof (buf)) == sizeof (buf))
- {
- puts ("read succeeded");
- return (void *) 1l;
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
- void *r;
- struct sigaction sa;
-
- sa.sa_handler = SIG_IGN;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
-
- if (sigaction (SIGPIPE, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- if (pipe (fd) != 0)
- {
- puts ("pipe failed");
- return 1;
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
-
- /* This will cause the read in the child to return. */
- close (fd[0]);
-
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("result is wrong");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel4.c b/test/nptl/tst-cancel4.c
deleted file mode 100644
index ecaf297cc..000000000
--- a/test/nptl/tst-cancel4.c
+++ /dev/null
@@ -1,2393 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* NOTE: this tests functionality beyond POSIX. POSIX does not allow
- exit to be called more than once. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <pthread.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <termios.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/msg.h>
-#include <sys/poll.h>
-#include <sys/select.h>
-#include <sys/socket.h>
-#include <sys/uio.h>
-#include <sys/un.h>
-#include <sys/wait.h>
-
-#include "pthreadP.h"
-
-
-/* Since STREAMS are not supported in the standard Linux kernel and
- there we don't advertise STREAMS as supported is no need to test
- the STREAMS related functions. This affects
- getmsg() getpmsg() putmsg()
- putpmsg()
-
- lockf() and fcntl() are tested in tst-cancel16.
-
- pthread_join() is tested in tst-join5.
-
- pthread_testcancel()'s only purpose is to allow cancellation. This
- is tested in several places.
-
- sem_wait() and sem_timedwait() are checked in tst-cancel1[2345] tests.
-
- mq_send(), mq_timedsend(), mq_receive() and mq_timedreceive() are checked
- in tst-mqueue8{,x} tests.
-
- aio_suspend() is tested in tst-cancel17.
-
- clock_nanosleep() is tested in tst-cancel18.
-*/
-
-/* Pipe descriptors. */
-static int fds[2];
-
-/* Temporary file descriptor, to be closed after each round. */
-static int tempfd = -1;
-static int tempfd2 = -1;
-/* Name of temporary file to be removed after each round. */
-static char *tempfname;
-/* Temporary message queue. */
-static int tempmsg = -1;
-
-/* Often used barrier for two threads. */
-static pthread_barrier_t b2;
-
-
-#ifndef IPC_ADDVAL
-# define IPC_ADDVAL 0
-#endif
-
-/* The WRITE_BUFFER_SIZE value needs to be chosen such that if we set
- the socket send buffer size to '1', a write of this size on that
- socket will block.
-
- The Linux kernel imposes a minimum send socket buffer size which
- has changed over the years. As of Linux 3.10 the value is:
-
- 2 * (2048 + SKB_DATA_ALIGN(sizeof(struct sk_buff)))
-
- which is attempting to make sure that with standard MTUs,
- TCP can always queue up at least 2 full sized packets.
-
- Furthermore, there is logic in the socket send paths that
- will allow one more packet (of any size) to be queued up as
- long as some socket buffer space remains. Blocking only
- occurs when we try to queue up a new packet and the send
- buffer space has already been fully consumed.
-
- Therefore we must set this value to the largest possible value of
- the formula above (and since it depends upon the size of "struct
- sk_buff", it is dependent upon machine word size etc.) plus some
- slack space. */
-
-#define WRITE_BUFFER_SIZE 16384
-
-/* Cleanup handling test. */
-static int cl_called;
-
-static void
-cl (void *arg)
-{
- ++cl_called;
-}
-
-
-
-static void *
-tf_read (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[0];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- ssize_t s;
- pthread_cleanup_push (cl, NULL);
-
- char buf[100];
- s = read (fd, buf, sizeof (buf));
-
- pthread_cleanup_pop (0);
-
- printf ("%s: read returns with %zd\n", __FUNCTION__, s);
-
- exit (1);
-}
-
-
-static void *
-tf_readv (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[0];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- ssize_t s;
- pthread_cleanup_push (cl, NULL);
-
- char buf[100];
- struct iovec iov[1] = { [0] = { .iov_base = buf, .iov_len = sizeof (buf) } };
- s = readv (fd, iov, 1);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: readv returns with %zd\n", __FUNCTION__, s);
-
- exit (1);
-}
-
-
-static void *
-tf_write (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[1];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- ssize_t s;
- pthread_cleanup_push (cl, NULL);
-
- char buf[WRITE_BUFFER_SIZE];
- memset (buf, '\0', sizeof (buf));
- s = write (fd, buf, sizeof (buf));
-
- pthread_cleanup_pop (0);
-
- printf ("%s: write returns with %zd\n", __FUNCTION__, s);
-
- exit (1);
-}
-
-
-static void *
-tf_writev (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[1];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- ssize_t s;
- pthread_cleanup_push (cl, NULL);
-
- char buf[WRITE_BUFFER_SIZE];
- memset (buf, '\0', sizeof (buf));
- struct iovec iov[1] = { [0] = { .iov_base = buf, .iov_len = sizeof (buf) } };
- s = writev (fd, iov, 1);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: writev returns with %zd\n", __FUNCTION__, s);
-
- exit (1);
-}
-
-/* sleep is not early cancelable, disable for now */
-#if 0
-static void *
-tf_sleep (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- sleep (arg == NULL ? 1000000 : 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sleep returns\n", __FUNCTION__);
-
- exit (1);
-}
-#endif
-
-static void *
-tf_usleep (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- usleep (arg == NULL ? (useconds_t) ULONG_MAX : 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: usleep returns\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_nanosleep (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- struct timespec ts = { .tv_sec = arg == NULL ? 10000000 : 0, .tv_nsec = 0 };
- TEMP_FAILURE_RETRY (nanosleep (&ts, &ts));
-
- pthread_cleanup_pop (0);
-
- printf ("%s: nanosleep returns\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_select (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[0];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- fd_set rfs;
- FD_ZERO (&rfs);
- FD_SET (fd, &rfs);
-
- int s;
- pthread_cleanup_push (cl, NULL);
-
- s = select (fd + 1, &rfs, NULL, NULL, NULL);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: select returns with %d (%s)\n", __FUNCTION__, s,
- strerror (errno));
-
- exit (1);
-}
-
-
-static void *
-tf_pselect (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[0];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- fd_set rfs;
- FD_ZERO (&rfs);
- FD_SET (fd, &rfs);
-
- int s;
- pthread_cleanup_push (cl, NULL);
-
- s = pselect (fd + 1, &rfs, NULL, NULL, NULL, NULL);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: pselect returns with %d (%s)\n", __FUNCTION__, s,
- strerror (errno));
-
- exit (1);
-}
-
-
-static void *
-tf_poll (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[0];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- struct pollfd rfs[1] = { [0] = { .fd = fd, .events = POLLIN } };
-
- int s;
- pthread_cleanup_push (cl, NULL);
-
- s = poll (rfs, 1, -1);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: poll returns with %d (%s)\n", __FUNCTION__, s,
- strerror (errno));
-
- exit (1);
-}
-
-
-static void *
-tf_ppoll (void *arg)
-{
- int fd;
- int r;
-
- if (arg == NULL)
- fd = fds[0];
- else
- {
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = fd = mkstemp (fname);
- if (fd == -1)
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- unlink (fname);
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- struct pollfd rfs[1] = { [0] = { .fd = fd, .events = POLLIN } };
-
- int s;
- pthread_cleanup_push (cl, NULL);
-
- s = ppoll (rfs, 1, NULL, NULL);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: ppoll returns with %d (%s)\n", __FUNCTION__, s,
- strerror (errno));
-
- exit (1);
-}
-
-
-static void *
-tf_wait (void *arg)
-{
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- /* Make the program disappear after a while. */
- if (arg == NULL)
- sleep (10);
- exit (0);
- }
-
- int r;
- if (arg != NULL)
- {
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- while (nanosleep (&ts, &ts) != 0)
- continue;
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- int s;
- pthread_cleanup_push (cl, NULL);
-
- s = wait (NULL);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: wait returns with %d (%s)\n", __FUNCTION__, s,
- strerror (errno));
-
- exit (1);
-}
-
-
-static void *
-tf_waitpid (void *arg)
-{
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- /* Make the program disappear after a while. */
- if (arg == NULL)
- sleep (10);
- exit (0);
- }
-
- int r;
- if (arg != NULL)
- {
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- while (nanosleep (&ts, &ts) != 0)
- continue;
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- int s;
- pthread_cleanup_push (cl, NULL);
-
- s = waitpid (-1, NULL, 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: waitpid returns with %d (%s)\n", __FUNCTION__, s,
- strerror (errno));
-
- exit (1);
-}
-
-
-static void *
-tf_waitid (void *arg)
-{
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- /* Make the program disappear after a while. */
- if (arg == NULL)
- sleep (10);
- exit (0);
- }
-
- int r;
- if (arg != NULL)
- {
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- while (nanosleep (&ts, &ts) != 0)
- continue;
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- int s;
- pthread_cleanup_push (cl, NULL);
-
-#ifndef WEXITED
-# define WEXITED 0
-#endif
- siginfo_t si;
- s = waitid (P_PID, pid, &si, WEXITED);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: waitid returns with %d (%s)\n", __FUNCTION__, s,
- strerror (errno));
-
- exit (1);
-}
-
-
-static void *
-tf_sigpause (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- sigpause (SIGCANCEL);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sigpause returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_sigsuspend (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- /* Just for fun block all signals. */
- sigset_t mask;
- sigfillset (&mask);
- sigsuspend (&mask);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sigsuspend returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_sigwait (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- /* Block SIGUSR1. */
- sigset_t mask;
- sigemptyset (&mask);
- sigaddset (&mask, SIGUSR1);
- if (pthread_sigmask (SIG_BLOCK, &mask, NULL) != 0)
- {
- printf ("%s: pthread_sigmask failed\n", __FUNCTION__);
- exit (1);
- }
-
- int sig;
- pthread_cleanup_push (cl, NULL);
-
- /* Wait for SIGUSR1. */
- sigwait (&mask, &sig);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sigwait returned with signal %d\n", __FUNCTION__, sig);
-
- exit (1);
-}
-
-
-static void *
-tf_sigwaitinfo (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- /* Block SIGUSR1. */
- sigset_t mask;
- sigemptyset (&mask);
- sigaddset (&mask, SIGUSR1);
- if (pthread_sigmask (SIG_BLOCK, &mask, NULL) != 0)
- {
- printf ("%s: pthread_sigmask failed\n", __FUNCTION__);
- exit (1);
- }
-
- siginfo_t info;
- pthread_cleanup_push (cl, NULL);
-
- /* Wait for SIGUSR1. */
- sigwaitinfo (&mask, &info);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sigwaitinfo returned with signal %d\n", __FUNCTION__,
- info.si_signo);
-
- exit (1);
-}
-
-
-static void *
-tf_sigtimedwait (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- /* Block SIGUSR1. */
- sigset_t mask;
- sigemptyset (&mask);
- sigaddset (&mask, SIGUSR1);
- if (pthread_sigmask (SIG_BLOCK, &mask, NULL) != 0)
- {
- printf ("%s: pthread_sigmask failed\n", __FUNCTION__);
- exit (1);
- }
-
- /* Wait for SIGUSR1. */
- siginfo_t info;
- struct timespec ts = { .tv_sec = 60, .tv_nsec = 0 };
- pthread_cleanup_push (cl, NULL);
-
- sigtimedwait (&mask, &info, &ts);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sigtimedwait returned with signal %d\n", __FUNCTION__,
- info.si_signo);
-
- exit (1);
-}
-
-
-static void *
-tf_pause (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- pause ();
-
- pthread_cleanup_pop (0);
-
- printf ("%s: pause returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_accept (void *arg)
-{
- struct sockaddr_un sun;
- /* To test a non-blocking accept call we make the call file by using
- a datagrame socket. */
- int pf = arg == NULL ? SOCK_STREAM : SOCK_DGRAM;
-
- tempfd = socket (AF_UNIX, pf, 0);
- if (tempfd == -1)
- {
- printf ("%s: socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- /* prevent endless loop, when bind fails forever */
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-1-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
-
- unlink (sun.sun_path);
-
- listen (tempfd, 5);
-
- socklen_t len = sizeof (sun);
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- accept (tempfd, (struct sockaddr *) &sun, &len);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: accept returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_send (void *arg)
-{
- struct sockaddr_un sun;
-
- tempfd = socket (AF_UNIX, SOCK_STREAM, 0);
- if (tempfd == -1)
- {
- printf ("%s: first socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-2-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
-
- listen (tempfd, 5);
-
- tempfd2 = socket (AF_UNIX, SOCK_STREAM, 0);
- if (tempfd2 == -1)
- {
- printf ("%s: second socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (connect (tempfd2, (struct sockaddr *) &sun, sizeof (sun)) != 0)
- {
- printf ("%s: connect failed\n", __FUNCTION__);
- exit(1);
- }
-
- unlink (sun.sun_path);
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- /* Very large block, so that the send call blocks. */
- char mem[700000];
-
- send (tempfd2, mem, arg == NULL ? sizeof (mem) : 1, 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: send returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_recv (void *arg)
-{
- struct sockaddr_un sun;
-
- tempfd = socket (AF_UNIX, SOCK_STREAM, 0);
- if (tempfd == -1)
- {
- printf ("%s: first socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-3-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
-
- listen (tempfd, 5);
-
- tempfd2 = socket (AF_UNIX, SOCK_STREAM, 0);
- if (tempfd2 == -1)
- {
- printf ("%s: second socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (connect (tempfd2, (struct sockaddr *) &sun, sizeof (sun)) != 0)
- {
- printf ("%s: connect failed\n", __FUNCTION__);
- exit(1);
- }
-
- unlink (sun.sun_path);
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char mem[70];
-
- recv (tempfd2, mem, arg == NULL ? sizeof (mem) : 0, 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: recv returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_recvfrom (void *arg)
-{
- struct sockaddr_un sun;
-
- tempfd = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd == -1)
- {
- printf ("%s: first socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-4-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
-
- tempfname = strdup (sun.sun_path);
-
- tempfd2 = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd2 == -1)
- {
- printf ("%s: second socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char mem[70];
- socklen_t len = sizeof (sun);
-
- recvfrom (tempfd2, mem, arg == NULL ? sizeof (mem) : 0, 0,
- (struct sockaddr *) &sun, &len);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: recvfrom returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_recvmsg (void *arg)
-{
- struct sockaddr_un sun;
-
- tempfd = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd == -1)
- {
- printf ("%s: first socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-5-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
-
- tempfname = strdup (sun.sun_path);
-
- tempfd2 = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd2 == -1)
- {
- printf ("%s: second socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char mem[70];
- struct iovec iov[1];
- iov[0].iov_base = mem;
- iov[0].iov_len = arg == NULL ? sizeof (mem) : 0;
-
- struct msghdr m;
- m.msg_name = &sun;
- m.msg_namelen = sizeof (sun);
- m.msg_iov = iov;
- m.msg_iovlen = 1;
- m.msg_control = NULL;
- m.msg_controllen = 0;
-
- recvmsg (tempfd2, &m, 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: recvmsg returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_open (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which open()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- open ("Makefile", O_RDONLY);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: open returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_close (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which close()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- char fname[] = "/tmp/tst-cancel-fd-XXXXXX";
- tempfd = mkstemp (fname);
- if (tempfd == -1)
- {
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- exit (1);
- }
- unlink (fname);
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- close (tempfd);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: close returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_pread (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which pread()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- tempfd = open ("Makefile", O_RDONLY);
- if (tempfd == -1)
- {
- printf ("%s: cannot open Makefile\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char mem[10];
- pread (tempfd, mem, sizeof (mem), 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: pread returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_pwrite (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which pwrite()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- char fname[] = "/tmp/tst-cancel4-fd-XXXXXX";
- tempfd = mkstemp (fname);
- if (tempfd == -1)
- {
- printf ("%s: mkstemp failed\n", __FUNCTION__);
- exit (1);
- }
- unlink (fname);
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char mem[10];
- pwrite (tempfd, mem, sizeof (mem), 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: pwrite returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_fsync (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which fsync()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- tempfd = open ("Makefile", O_RDONLY);
- if (tempfd == -1)
- {
- printf ("%s: cannot open Makefile\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- fsync (tempfd);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: fsync returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_fdatasync (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which fdatasync()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- tempfd = open ("Makefile", O_RDONLY);
- if (tempfd == -1)
- {
- printf ("%s: cannot open Makefile\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- fdatasync (tempfd);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: fdatasync returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_msync (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which msync()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- tempfd = open ("Makefile", O_RDONLY);
- if (tempfd == -1)
- {
- printf ("%s: cannot open Makefile\n", __FUNCTION__);
- exit (1);
- }
- void *p = mmap (NULL, 10, PROT_READ, MAP_SHARED, tempfd, 0);
- if (p == MAP_FAILED)
- {
- printf ("%s: mmap failed\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- msync (p, 10, 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: msync returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_sendto (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which sendto()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- struct sockaddr_un sun;
-
- tempfd = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd == -1)
- {
- printf ("%s: first socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-6-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
- tempfname = strdup (sun.sun_path);
-
- tempfd2 = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd2 == -1)
- {
- printf ("%s: second socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char mem[1];
-
- sendto (tempfd2, mem, arg == NULL ? sizeof (mem) : 1, 0,
- (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path) + strlen (sun.sun_path) + 1);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sendto returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_sendmsg (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which sendmsg()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- struct sockaddr_un sun;
-
- tempfd = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd == -1)
- {
- printf ("%s: first socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-7-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
- tempfname = strdup (sun.sun_path);
-
- tempfd2 = socket (AF_UNIX, SOCK_DGRAM, 0);
- if (tempfd2 == -1)
- {
- printf ("%s: second socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char mem[1];
- struct iovec iov[1];
- iov[0].iov_base = mem;
- iov[0].iov_len = 1;
-
- struct msghdr m;
- m.msg_name = &sun;
- m.msg_namelen = (offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1);
- m.msg_iov = iov;
- m.msg_iovlen = 1;
- m.msg_control = NULL;
- m.msg_controllen = 0;
-
- sendmsg (tempfd2, &m, 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: sendmsg returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_creat (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which sendmsg()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- creat ("tmp/tst-cancel-4-should-not-exist", 0666);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: creat returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_connect (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which connect()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- struct sockaddr_un sun;
-
- tempfd = socket (AF_UNIX, SOCK_STREAM, 0);
- if (tempfd == -1)
- {
- printf ("%s: first socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int tries = 0;
- do
- {
- if (++tries > 10)
- {
- printf ("%s: too many unsuccessful bind calls\n", __FUNCTION__);
- exit (1);
- }
-
- strcpy (sun.sun_path, "/tmp/tst-cancel4-socket-2-XXXXXX");
- if (mktemp (sun.sun_path) == NULL)
- {
- printf ("%s: cannot generate temp file name\n", __FUNCTION__);
- exit (1);
- }
- sun.sun_family = AF_UNIX;
- }
- while (bind (tempfd, (struct sockaddr *) &sun,
- offsetof (struct sockaddr_un, sun_path)
- + strlen (sun.sun_path) + 1) != 0);
- tempfname = strdup (sun.sun_path);
-
- listen (tempfd, 5);
-
- tempfd2 = socket (AF_UNIX, SOCK_STREAM, 0);
- if (tempfd2 == -1)
- {
- printf ("%s: second socket call failed\n", __FUNCTION__);
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- connect (tempfd2, (struct sockaddr *) &sun, sizeof (sun));
-
- pthread_cleanup_pop (0);
-
- printf ("%s: connect returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_tcdrain (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which tcdrain()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- pthread_cleanup_push (cl, NULL);
-
- /* Regardless of stderr being a terminal, the tcdrain call should be
- canceled. */
- tcdrain (STDERR_FILENO);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: tcdrain returned\n", __FUNCTION__);
-
- exit (1);
-}
-
-
-static void *
-tf_msgrcv (void *arg)
-{
- tempmsg = msgget (IPC_PRIVATE, 0666 | IPC_CREAT);
- if (tempmsg == -1)
- {
- printf ("%s: msgget failed: %s\n", __FUNCTION__, strerror (errno));
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- if (arg != NULL)
- {
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
- }
-
- ssize_t s;
-
- pthread_cleanup_push (cl, NULL);
-
- struct
- {
- long int type;
- char mem[10];
- } m;
- int randnr;
- /* We need a positive random number. */
- do
- randnr = random () % 64000;
- while (randnr <= 0);
- do
- {
- errno = 0;
- s = msgrcv (tempmsg, (struct msgbuf *) &m, 10, randnr, 0);
- }
- while (errno == EIDRM || errno == EINTR);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: msgrcv returned %zd with errno = %m\n", __FUNCTION__, s);
-
- msgctl (tempmsg, IPC_RMID, NULL);
-
- exit (1);
-}
-
-
-static void *
-tf_msgsnd (void *arg)
-{
- if (arg == NULL)
- // XXX If somebody can provide a portable test case in which msgsnd()
- // blocks we can enable this test to run in both rounds.
- abort ();
-
- tempmsg = msgget (IPC_PRIVATE, 0666 | IPC_CREAT);
- if (tempmsg == -1)
- {
- printf ("%s: msgget failed: %s\n", __FUNCTION__, strerror (errno));
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- struct
- {
- long int type;
- char mem[1];
- } m;
- /* We need a positive random number. */
- do
- m.type = random () % 64000;
- while (m.type <= 0);
- msgsnd (tempmsg, (struct msgbuf *) &m, sizeof (m.mem), 0);
-
- pthread_cleanup_pop (0);
-
- printf ("%s: msgsnd returned\n", __FUNCTION__);
-
- msgctl (tempmsg, IPC_RMID, NULL);
-
- exit (1);
-}
-
-
-static struct
-{
- const char *name;
- void *(*tf) (void *);
- int nb;
- int only_early;
-} tests[] =
-{
-#define ADD_TEST(name, nbar, early) { #name, tf_##name, nbar, early }
- ADD_TEST (read, 2, 0),
- ADD_TEST (readv, 2, 0),
- ADD_TEST (select, 2, 0),
- ADD_TEST (pselect, 2, 0),
- ADD_TEST (poll, 2, 0),
- ADD_TEST (ppoll, 2, 0),
- ADD_TEST (write, 2, 0),
- ADD_TEST (writev, 2, 0),
- ADD_TEST (usleep, 2, 0),
- ADD_TEST (nanosleep, 2, 0),
- ADD_TEST (wait, 2, 0),
- ADD_TEST (waitid, 2, 0),
- ADD_TEST (waitpid, 2, 0),
- ADD_TEST (sigpause, 2, 0),
- ADD_TEST (sigsuspend, 2, 0),
- ADD_TEST (sigwait, 2, 0),
- ADD_TEST (sigwaitinfo, 2, 0),
- ADD_TEST (sigtimedwait, 2, 0),
- ADD_TEST (pause, 2, 0),
- ADD_TEST (accept, 2, 0),
- ADD_TEST (send, 2, 0),
- ADD_TEST (recv, 2, 0),
- ADD_TEST (recvfrom, 2, 0),
- ADD_TEST (recvmsg, 2, 0),
- ADD_TEST (open, 2, 1),
- ADD_TEST (close, 2, 1),
- ADD_TEST (pread, 2, 1),
- ADD_TEST (pwrite, 2, 1),
- ADD_TEST (fsync, 2, 1),
- ADD_TEST (fdatasync, 2, 1),
- ADD_TEST (msync, 2, 1),
- ADD_TEST (sendto, 2, 1),
- ADD_TEST (sendmsg, 2, 1),
- ADD_TEST (creat, 2, 1),
- ADD_TEST (connect, 2, 1),
- ADD_TEST (tcdrain, 2, 1),
- ADD_TEST (msgrcv, 2, 0),
- ADD_TEST (msgsnd, 2, 1),
-};
-#define ntest_tf (sizeof (tests) / sizeof (tests[0]))
-
-
-static int
-do_test (void)
-{
- int val;
- socklen_t len;
-
- if (socketpair (AF_UNIX, SOCK_STREAM, PF_UNIX, fds) != 0)
- {
- perror ("socketpair");
- exit (1);
- }
-
- val = 1;
- len = sizeof(val);
- setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val));
- if (getsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, &len) < 0)
- {
- perror ("getsockopt");
- exit (1);
- }
- if (val >= WRITE_BUFFER_SIZE)
- {
- puts ("minimum write buffer size too large");
- exit (1);
- }
- setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val));
-
- int result = 0;
- size_t cnt;
- for (cnt = 0; cnt < ntest_tf; ++cnt)
- {
- if (tests[cnt].only_early)
- continue;
-
- if (pthread_barrier_init (&b2, NULL, tests[cnt].nb) != 0)
- {
- puts ("b2 init failed");
- exit (1);
- }
-
- /* Reset the counter for the cleanup handler. */
- cl_called = 0;
-
- pthread_t th;
- if (pthread_create (&th, NULL, tests[cnt].tf, NULL) != 0)
- {
- printf ("create for '%s' test failed\n", tests[cnt].name);
- result = 1;
- continue;
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- result = 1;
- continue;
- }
-
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- while (nanosleep (&ts, &ts) != 0)
- continue;
-
- if (pthread_cancel (th) != 0)
- {
- printf ("cancel for '%s' failed\n", tests[cnt].name);
- result = 1;
- continue;
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- printf ("join for '%s' failed\n", tests[cnt].name);
- result = 1;
- continue;
- }
- if (status != PTHREAD_CANCELED)
- {
- printf ("thread for '%s' not canceled\n", tests[cnt].name);
- result = 1;
- continue;
- }
-
- if (pthread_barrier_destroy (&b2) != 0)
- {
- puts ("barrier_destroy failed");
- result = 1;
- continue;
- }
-
- if (cl_called == 0)
- {
- printf ("cleanup handler not called for '%s'\n", tests[cnt].name);
- result = 1;
- continue;
- }
- if (cl_called > 1)
- {
- printf ("cleanup handler called more than once for '%s'\n",
- tests[cnt].name);
- result = 1;
- continue;
- }
-
- printf ("in-time cancel test of '%s' successful\n", tests[cnt].name);
-
- if (tempfd != -1)
- {
- close (tempfd);
- tempfd = -1;
- }
- if (tempfd2 != -1)
- {
- close (tempfd2);
- tempfd2 = -1;
- }
- if (tempfname != NULL)
- {
- unlink (tempfname);
- free (tempfname);
- tempfname = NULL;
- }
- if (tempmsg != -1)
- {
- msgctl (tempmsg, IPC_RMID, NULL);
- tempmsg = -1;
- }
- }
-
- for (cnt = 0; cnt < ntest_tf; ++cnt)
- {
- if (pthread_barrier_init (&b2, NULL, tests[cnt].nb) != 0)
- {
- puts ("b2 init failed");
- exit (1);
- }
-
- /* Reset the counter for the cleanup handler. */
- cl_called = 0;
-
- pthread_t th;
- if (pthread_create (&th, NULL, tests[cnt].tf, (void *) 1l) != 0)
- {
- printf ("create for '%s' test failed\n", tests[cnt].name);
- result = 1;
- continue;
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- result = 1;
- continue;
- }
-
- if (pthread_cancel (th) != 0)
- {
- printf ("cancel for '%s' failed\n", tests[cnt].name);
- result = 1;
- continue;
- }
-
- r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- result = 1;
- continue;
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- printf ("join for '%s' failed\n", tests[cnt].name);
- result = 1;
- continue;
- }
- if (status != PTHREAD_CANCELED)
- {
- printf ("thread for '%s' not canceled\n", tests[cnt].name);
- result = 1;
- continue;
- }
-
- if (pthread_barrier_destroy (&b2) != 0)
- {
- puts ("barrier_destroy failed");
- result = 1;
- continue;
- }
-
- if (cl_called == 0)
- {
- printf ("cleanup handler not called for '%s'\n", tests[cnt].name);
- result = 1;
- continue;
- }
- if (cl_called > 1)
- {
- printf ("cleanup handler called more than once for '%s'\n",
- tests[cnt].name);
- result = 1;
- continue;
- }
-
- printf ("early cancel test of '%s' successful\n", tests[cnt].name);
-
- if (tempfd != -1)
- {
- close (tempfd);
- tempfd = -1;
- }
- if (tempfd2 != -1)
- {
- close (tempfd2);
- tempfd2 = -1;
- }
- if (tempfname != NULL)
- {
- unlink (tempfname);
- free (tempfname);
- tempfname = NULL;
- }
- if (tempmsg != -1)
- {
- msgctl (tempmsg, IPC_RMID, NULL);
- tempmsg = -1;
- }
- }
-
- return result;
-}
-
-#define TIMEOUT 60
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel5.c b/test/nptl/tst-cancel5.c
deleted file mode 100644
index 1c879eba8..000000000
--- a/test/nptl/tst-cancel5.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel4.c"
diff --git a/test/nptl/tst-cancel6.c b/test/nptl/tst-cancel6.c
deleted file mode 100644
index 4e11277ea..000000000
--- a/test/nptl/tst-cancel6.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void *
-tf (void *arg)
-{
- char buf[100];
- fgets (buf, sizeof (buf), arg);
- /* This call should never return. */
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- int fd[2];
- if (pipe (fd) != 0)
- {
- puts ("pipe failed");
- return 1;
- }
-
- FILE *fp = fdopen (fd[0], "r");
- if (fp == NULL)
- {
- puts ("fdopen failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, fp) != 0)
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- sleep (1);
-
- if (pthread_cancel (th) != 0)
- {
- puts ("pthread_cancel failed");
- return 1;
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("pthread_join failed");
- return 1;
- }
-
- return r != PTHREAD_CANCELED;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel7.c b/test/nptl/tst-cancel7.c
deleted file mode 100644
index 9e7d22ed5..000000000
--- a/test/nptl/tst-cancel7.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-const char *command;
-const char *pidfile;
-char pidfilename[] = "/tmp/tst-cancel7-XXXXXX";
-
-static void *
-tf (void *arg)
-{
- const char *args = " -d -p ";
- char *cmd = alloca (strlen (command) + strlen (args)
- + strlen (pidfilename) + 1);
-
- strcpy (stpcpy (stpcpy (cmd, command), args), pidfilename);
- system (cmd);
- /* This call should never return. */
- return NULL;
-}
-
-
-static void
-sl (void)
-{
- FILE *f = fopen (pidfile, "w");
- if (f == NULL)
- exit (1);
-
- fprintf (f, "%lld\n", (long long) getpid ());
- fflush (f);
-
- struct flock fl =
- {
- .l_type = F_WRLCK,
- .l_start = 0,
- .l_whence = SEEK_SET,
- .l_len = 1
- };
- if (fcntl (fileno (f), F_SETLK, &fl) != 0)
- exit (1);
-
- sigset_t ss;
- sigfillset (&ss);
- sigsuspend (&ss);
- exit (0);
-}
-
-
-static void
-do_prepare (int argc, char *argv[])
-{
- if (command == NULL)
- command = argv[0];
-
- if (pidfile)
- sl ();
-
- int fd = mkstemp (pidfilename);
- if (fd == -1)
- {
- puts ("mkstemp failed");
- exit (1);
- }
-
- write (fd, " ", 1);
- close (fd);
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- do
- sleep (1);
- while (access (pidfilename, R_OK) != 0);
-
- if (pthread_cancel (th) != 0)
- {
- puts ("pthread_cancel failed");
- return 1;
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("pthread_join failed");
- return 1;
- }
-
- sleep (1);
-
- FILE *f = fopen (pidfilename, "r+");
- if (f == NULL)
- {
- puts ("no pidfile");
- return 1;
- }
-
- long long ll;
- if (fscanf (f, "%lld\n", &ll) != 1)
- {
- puts ("could not read pid");
- unlink (pidfilename);
- return 1;
- }
-
- struct flock fl =
- {
- .l_type = F_WRLCK,
- .l_start = 0,
- .l_whence = SEEK_SET,
- .l_len = 1
- };
- if (fcntl (fileno (f), F_GETLK, &fl) != 0)
- {
- puts ("F_GETLK failed");
- unlink (pidfilename);
- return 1;
- }
-
- if (fl.l_type != F_UNLCK)
- {
- printf ("child %lld still running\n", (long long) fl.l_pid);
- if (fl.l_pid == ll)
- kill (fl.l_pid, SIGKILL);
-
- unlink (pidfilename);
- return 1;
- }
-
- fclose (f);
-
- unlink (pidfilename);
-
- return r != PTHREAD_CANCELED;
-}
-
-#if 0 /* unused */
-static void
-do_cleanup (void)
-{
- FILE *f = fopen (pidfilename, "r+");
- long long ll;
-
- if (f != NULL && fscanf (f, "%lld\n", &ll) == 1)
- {
- struct flock fl =
- {
- .l_type = F_WRLCK,
- .l_start = 0,
- .l_whence = SEEK_SET,
- .l_len = 1
- };
- if (fcntl (fileno (f), F_GETLK, &fl) == 0 && fl.l_type != F_UNLCK
- && fl.l_pid == ll)
- kill (fl.l_pid, SIGKILL);
-
- fclose (f);
- }
-
- unlink (pidfilename);
-}
-#endif
-
-#define CMDLINE_OPTIONS \
- "c:p:"
-#define CMDLINE_PROCESS \
- case 'c': \
- command = optarg; \
- break; \
- case 'p': \
- pidfile = optarg; \
- break;
-#define PREPARE(argc, argv) do_prepare (argc, argv)
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 5
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel8.c b/test/nptl/tst-cancel8.c
deleted file mode 100644
index 1c91d47a0..000000000
--- a/test/nptl/tst-cancel8.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static pthread_barrier_t bar;
-
-static int global;
-
-
-static void
-cleanup (void *arg)
-{
- global = 1;
-}
-
-
-static void *
-tf (void *arg)
-{
- /* Enable cancellation, but defer it. */
- if (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) != 0)
- {
- puts ("setcancelstate failed");
- exit (1);
- }
- if (pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, NULL) != 0)
- {
- puts ("setcanceltype failed");
- exit (1);
- }
-
- /* Add cleanup handler. */
- pthread_cleanup_push (cleanup, NULL);
-
- /* Synchronize with the main thread. */
- int r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: first barrier_wait failed");
- exit (1);
- }
-
- /* And again. Once this is done the main thread should have canceled
- this thread. */
- r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: second barrier_wait failed");
- exit (1);
- }
-
- /* Remove the cleanup handler without executing it. */
- pthread_cleanup_pop (0);
-
- /* Now react on the cancellation. */
- pthread_testcancel ();
-
- /* This call should never return. */
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("first barrier_wait failed");
- exit (1);
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("pthread_cancel failed");
- return 1;
- }
-
- r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("second barrier_wait failed");
- exit (1);
- }
-
- void *result;
- if (pthread_join (th, &result) != 0)
- {
- puts ("pthread_join failed");
- return 1;
- }
-
- if (result != PTHREAD_CANCELED)
- {
- puts ("thread was not canceled");
- exit (1);
- }
-
- if (global != 0)
- {
- puts ("cancellation handler has been called");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancel9.c b/test/nptl/tst-cancel9.c
deleted file mode 100644
index 40a62c588..000000000
--- a/test/nptl/tst-cancel9.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fcntl.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static pthread_barrier_t b;
-
-
-static void
-cleanup (void *arg)
-{
- fputs ("in cleanup\n", stdout);
-}
-
-
-static void *
-tf (void *arg)
-{
- int fd = open ("/dev/null", O_RDWR);
- if (fd == -1)
- {
- puts ("cannot open /dev/null");
- exit (1);
- }
- FILE *fp = fdopen (fd, "w");
- if (fp == NULL)
- {
- puts ("fdopen failed");
- exit (1);
- }
-
- pthread_cleanup_push (cleanup, NULL);
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- while (1)
- /* fprintf() uses write() which is a cancallation point. */
- fprintf (fp, "foo");
-
- pthread_cleanup_pop (0);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- sleep (1);
-
- puts ("cancel now");
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- exit (1);
- }
-
- puts ("waiting for the child");
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread wasn't canceled");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cancelx10.c b/test/nptl/tst-cancelx10.c
deleted file mode 100644
index e5bbb34e6..000000000
--- a/test/nptl/tst-cancelx10.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel10.c"
diff --git a/test/nptl/tst-cancelx11.c b/test/nptl/tst-cancelx11.c
deleted file mode 100644
index ffcc2eefc..000000000
--- a/test/nptl/tst-cancelx11.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel11.c"
diff --git a/test/nptl/tst-cancelx12.c b/test/nptl/tst-cancelx12.c
deleted file mode 100644
index f90ae61ba..000000000
--- a/test/nptl/tst-cancelx12.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel12.c"
diff --git a/test/nptl/tst-cancelx13.c b/test/nptl/tst-cancelx13.c
deleted file mode 100644
index 37c4c39c3..000000000
--- a/test/nptl/tst-cancelx13.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel13.c"
diff --git a/test/nptl/tst-cancelx14.c b/test/nptl/tst-cancelx14.c
deleted file mode 100644
index ba4e77584..000000000
--- a/test/nptl/tst-cancelx14.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel14.c"
diff --git a/test/nptl/tst-cancelx15.c b/test/nptl/tst-cancelx15.c
deleted file mode 100644
index 005c1f6e3..000000000
--- a/test/nptl/tst-cancelx15.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel15.c"
diff --git a/test/nptl/tst-cancelx16.c b/test/nptl/tst-cancelx16.c
deleted file mode 100644
index 99af3b197..000000000
--- a/test/nptl/tst-cancelx16.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel16.c"
diff --git a/test/nptl/tst-cancelx18.c b/test/nptl/tst-cancelx18.c
deleted file mode 100644
index 56da18f38..000000000
--- a/test/nptl/tst-cancelx18.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel18.c"
diff --git a/test/nptl/tst-cancelx2.c b/test/nptl/tst-cancelx2.c
deleted file mode 100644
index 95dc8a857..000000000
--- a/test/nptl/tst-cancelx2.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel2.c"
diff --git a/test/nptl/tst-cancelx20.c b/test/nptl/tst-cancelx20.c
deleted file mode 100644
index 6bd86376c..000000000
--- a/test/nptl/tst-cancelx20.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel20.c"
diff --git a/test/nptl/tst-cancelx21.c b/test/nptl/tst-cancelx21.c
deleted file mode 100644
index 2a01061ea..000000000
--- a/test/nptl/tst-cancelx21.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel21.c"
diff --git a/test/nptl/tst-cancelx3.c b/test/nptl/tst-cancelx3.c
deleted file mode 100644
index 3937f10b9..000000000
--- a/test/nptl/tst-cancelx3.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel3.c"
diff --git a/test/nptl/tst-cancelx4.c b/test/nptl/tst-cancelx4.c
deleted file mode 100644
index 1c879eba8..000000000
--- a/test/nptl/tst-cancelx4.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel4.c"
diff --git a/test/nptl/tst-cancelx6.c b/test/nptl/tst-cancelx6.c
deleted file mode 100644
index 6926e21c2..000000000
--- a/test/nptl/tst-cancelx6.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel6.c"
diff --git a/test/nptl/tst-cancelx7.c b/test/nptl/tst-cancelx7.c
deleted file mode 100644
index 4df1a5881..000000000
--- a/test/nptl/tst-cancelx7.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel7.c"
diff --git a/test/nptl/tst-cancelx8.c b/test/nptl/tst-cancelx8.c
deleted file mode 100644
index 0555c7ceb..000000000
--- a/test/nptl/tst-cancelx8.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel8.c"
diff --git a/test/nptl/tst-cancelx9.c b/test/nptl/tst-cancelx9.c
deleted file mode 100644
index 9d84663d7..000000000
--- a/test/nptl/tst-cancelx9.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cancel9.c"
diff --git a/test/nptl/tst-cleanup0.c b/test/nptl/tst-cleanup0.c
deleted file mode 100644
index 401115d73..000000000
--- a/test/nptl/tst-cleanup0.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static int global;
-
-
-static void
-ch (void *arg)
-{
- int val = (long int) arg;
-
- printf ("ch (%d)\n", val);
-
- global *= val;
- global += val;
-}
-
-
-static void
-endfct (void)
-{
- /* We force exit right here. */
- _exit (global);
-}
-
-
-static int
-do_test (void)
-{
- atexit (endfct);
-
- pthread_cancel (pthread_self ());
-
- pthread_cleanup_push (ch, (void *) 1l);
-
- pthread_cleanup_push (ch, (void *) 2l);
-
- pthread_cleanup_push (ch, (void *) 3l);
-
-// pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-
- pthread_cleanup_pop (1);
-
- pthread_cleanup_pop (1);
-
- pthread_cleanup_pop (1);
-
- return 100;
-}
-
-
-#define EXPECTED_STATUS 9
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cleanup1.c b/test/nptl/tst-cleanup1.c
deleted file mode 100644
index e89f434f5..000000000
--- a/test/nptl/tst-cleanup1.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static int global;
-
-
-static void
-ch (void *arg)
-{
- int val = (long int) arg;
-
- printf ("ch (%d)\n", val);
-
- global *= val;
- global += val;
-}
-
-
-static void *
-tf (void *a)
-{
- pthread_cancel (pthread_self ());
-
- pthread_cleanup_push (ch, (void *) 1l);
-
- pthread_cleanup_push (ch, (void *) 2l);
-
- pthread_cleanup_push (ch, (void *) 3l);
-
- pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
-
- pthread_cleanup_pop (1);
-
- pthread_cleanup_pop (1);
-
- pthread_cleanup_pop (1);
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- write (2, "create failed\n", 14);
- _exit (1);
- }
-
- void *r;
- int e;
- if ((e = pthread_join (th, &r)) != 0)
- {
- printf ("join failed: %d\n", e);
- _exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- if (global != 9)
- {
- printf ("global = %d, expected 9\n", global);
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cleanup2.c b/test/nptl/tst-cleanup2.c
deleted file mode 100644
index d01301b9f..000000000
--- a/test/nptl/tst-cleanup2.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Bao Duong <bduong@progress.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <setjmp.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-static sigjmp_buf jmpbuf;
-
-static void
-sig_handler (int signo)
-{
- siglongjmp (jmpbuf, 1);
-}
-
-static int
-do_test (void)
-{
- char *p = NULL;
- struct sigaction sa;
-
- sa.sa_handler = sig_handler;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO;
-
- if (sigaction (SIGSEGV, &sa, 0))
- {
- perror ("installing SIGSEGV handler\n");
- exit (1);
- }
-
- puts ("Attempting to sprintf to null ptr");
- if (setjmp (jmpbuf))
- {
- puts ("Exiting main...");
- return 0;
- }
-
- sprintf (p, "This should segv\n");
-
- return 1;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cleanup3.c b/test/nptl/tst-cleanup3.c
deleted file mode 100644
index 67bd9eb6f..000000000
--- a/test/nptl/tst-cleanup3.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static int global;
-
-
-static void
-ch (void *arg)
-{
- int val = (long int) arg;
-
- printf ("ch (%d)\n", val);
-
- global *= val;
- global += val;
-}
-
-
-static void *
-tf (void *a)
-{
- pthread_cleanup_push (ch, (void *) 1l);
-
- pthread_cleanup_push (ch, (void *) 2l);
-
- pthread_cleanup_push (ch, (void *) 3l);
-
- pthread_exit ((void *) 1l);
-
- pthread_cleanup_pop (1);
-
- pthread_cleanup_pop (1);
-
- pthread_cleanup_pop (1);
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- write (2, "create failed\n", 14);
- _exit (1);
- }
-
- void *r;
- int e;
- if ((e = pthread_join (th, &r)) != 0)
- {
- printf ("join failed: %d\n", e);
- _exit (1);
- }
-
- if (r != (void *) 1l)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- if (global != 9)
- {
- printf ("global = %d, expected 9\n", global);
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cleanup4.c b/test/nptl/tst-cleanup4.c
deleted file mode 100644
index 3fe399820..000000000
--- a/test/nptl/tst-cleanup4.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-/* LinuxThreads pthread_cleanup_{push,pop} helpers. */
-extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
- void (*__routine) (void *),
- void *__arg);
-extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
- int __execute);
-
-static int fds[2];
-static pthread_barrier_t b2;
-static int global;
-
-/* Defined in tst-cleanup4aux.c, never compiled with -fexceptions. */
-extern void fn5 (void);
-extern void fn7 (void);
-extern void fn9 (void);
-
-void
-clh (void *arg)
-{
- int val = (long int) arg;
-
- printf ("clh (%d)\n", val);
-
- global *= val;
- global += val;
-}
-
-
-static __attribute__((noinline)) void
-fn_read (void)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- char c;
- read (fds[0], &c, 1);
-}
-
-
-__attribute__((noinline)) void
-fn0 (void)
-{
- pthread_cleanup_push (clh, (void *) 1l);
-
- fn_read ();
-
- pthread_cleanup_pop (1);
-}
-
-
-__attribute__((noinline)) void
-fn1 (void)
-{
- /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
- struct _pthread_cleanup_buffer b;
- _pthread_cleanup_push (&b, clh, (void *) 2l);
-
- fn0 ();
-
- _pthread_cleanup_pop (&b, 1);
-}
-
-
-static __attribute__((noinline)) void
-fn2 (void)
-{
- pthread_cleanup_push (clh, (void *) 3l);
-
- fn1 ();
-
- pthread_cleanup_pop (1);
-}
-
-
-static void *
-tf (void *a)
-{
- switch ((long) a)
- {
- case 0:
- fn2 ();
- break;
- case 1:
- fn5 ();
- break;
- case 2:
- fn7 ();
- break;
- case 3:
- fn9 ();
- break;
- }
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- int result = 0;
-
- if (pipe (fds) != 0)
- {
- puts ("pipe failed");
- exit (1);
- }
-
- if (pthread_barrier_init (&b2, NULL, 2) != 0)
- {
- puts ("b2 init failed");
- exit (1);
- }
-
- const int expect[] =
- {
- 15, /* 1 2 3 */
- 276, /* 1 4 5 6 */
- 120, /* 1 7 8 */
- 460 /* 1 2 9 10 */
- };
-
- long i;
- for (i = 0; i < 4; ++i)
- {
- global = 0;
-
- printf ("test %ld\n", i);
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, (void *) i) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b2);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __FUNCTION__);
- exit (1);
- }
-
- pthread_cancel (th);
-
- void *r;
- if ((e = pthread_join (th, &r)) != 0)
- {
- printf ("join failed: %d\n", e);
- _exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- exit (1);
- }
-
- if (global != expect[i])
- {
- printf ("global = %d, expected %d\n", global, expect[i]);
- result = 1;
- }
- }
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cleanup4aux.c b/test/nptl/tst-cleanup4aux.c
deleted file mode 100644
index 029c4939f..000000000
--- a/test/nptl/tst-cleanup4aux.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
- void (*__routine) (void *),
- void *__arg);
-extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
- int __execute);
-
-extern void clh (void *arg);
-extern void fn0 (void);
-extern void fn1 (void);
-extern void fn5 (void);
-extern void fn7 (void);
-extern void fn9 (void);
-
-
-static __attribute__((noinline)) void
-fn3 (void)
-{
- /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
- struct _pthread_cleanup_buffer b;
- _pthread_cleanup_push (&b, clh, (void *) 4l);
-
- fn0 ();
-
- _pthread_cleanup_pop (&b, 1);
-}
-
-
-static __attribute__((noinline)) void
-fn4 (void)
-{
- pthread_cleanup_push (clh, (void *) 5l);
-
- fn3 ();
-
- pthread_cleanup_pop (1);
-}
-
-
-void
-fn5 (void)
-{
- /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
- struct _pthread_cleanup_buffer b;
- _pthread_cleanup_push (&b, clh, (void *) 6l);
-
- fn4 ();
-
- _pthread_cleanup_pop (&b, 1);
-}
-
-
-static __attribute__((noinline)) void
-fn6 (void)
-{
- pthread_cleanup_push (clh, (void *) 7l);
-
- fn0 ();
-
- pthread_cleanup_pop (1);
-}
-
-
-void
-fn7 (void)
-{
- /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
- struct _pthread_cleanup_buffer b;
- _pthread_cleanup_push (&b, clh, (void *) 8l);
-
- fn6 ();
-
- _pthread_cleanup_pop (&b, 1);
-}
-
-
-static __attribute__((noinline)) void
-fn8 (void)
-{
- pthread_cleanup_push (clh, (void *) 9l);
-
- fn1 ();
-
- pthread_cleanup_pop (1);
-}
-
-
-void
-fn9 (void)
-{
- /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */
- struct _pthread_cleanup_buffer b;
- _pthread_cleanup_push (&b, clh, (void *) 10l);
-
- fn8 ();
-
- _pthread_cleanup_pop (&b, 1);
-}
diff --git a/test/nptl/tst-cleanupx0.c b/test/nptl/tst-cleanupx0.c
deleted file mode 100644
index 0012ab1b2..000000000
--- a/test/nptl/tst-cleanupx0.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cleanup0.c"
diff --git a/test/nptl/tst-cleanupx1.c b/test/nptl/tst-cleanupx1.c
deleted file mode 100644
index 21e9e58bd..000000000
--- a/test/nptl/tst-cleanupx1.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cleanup1.c"
diff --git a/test/nptl/tst-cleanupx2.c b/test/nptl/tst-cleanupx2.c
deleted file mode 100644
index 8b9e35093..000000000
--- a/test/nptl/tst-cleanupx2.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cleanup2.c"
diff --git a/test/nptl/tst-cleanupx3.c b/test/nptl/tst-cleanupx3.c
deleted file mode 100644
index 90baf904f..000000000
--- a/test/nptl/tst-cleanupx3.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cleanup3.c"
diff --git a/test/nptl/tst-cleanupx4.c b/test/nptl/tst-cleanupx4.c
deleted file mode 100644
index 8dea954b5..000000000
--- a/test/nptl/tst-cleanupx4.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-cleanup4.c"
diff --git a/test/nptl/tst-clock.c b/test/nptl/tst-clock.c
deleted file mode 100644
index 2023cbc6d..000000000
--- a/test/nptl/tst-clock.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Test program for POSIX clock_* functions.
- Copyright (C) 2000 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-
-
-/* We want to see output immediately. */
-#define STDOUT_UNBUFFERED
-
-/* We expect to run at least 10 seconds. */
-#define TIMEOUT 15
-
-static int
-clock_test (clockid_t cl)
-{
- struct timespec old_ts;
- struct timespec ts;
- struct timespec waitit;
- int result = 0;
- int i;
-
- memset (&ts, '\0', sizeof ts);
-
- waitit.tv_sec = 0;
- waitit.tv_nsec = 500000000;
-
- /* Get and print resolution of the clock. */
- if (clock_getres (cl, &ts) == 0)
- {
- if (ts.tv_nsec < 0 || ts.tv_nsec >= 1000000000)
- {
- printf ("clock %d: nanosecond value of resolution wrong\n", cl);
- result = 1;
- }
- else
- printf ("clock %d: resolution = %ld.%09ld secs\n",
- cl, ts.tv_sec, ts.tv_nsec);
- }
- else
- {
- printf ("clock %d: cannot get resolution\n", cl);
- result = 1;
- }
-
- memset (&ts, '\0', sizeof ts);
- memset (&old_ts, '\0', sizeof old_ts);
-
- /* Next get the current time value a few times. */
- for (i = 0; i < 10; ++i)
- {
- if (clock_gettime (cl, &ts) == 0)
- {
- if (ts.tv_nsec < 0 || ts.tv_nsec >= 1000000000)
- {
- printf ("clock %d: nanosecond value of time wrong (try %d)\n",
- cl, i);
- result = 1;
- }
- else
- {
- printf ("clock %d: time = %ld.%09ld secs\n",
- cl, ts.tv_sec, ts.tv_nsec);
-
- if (memcmp (&ts, &old_ts, sizeof ts) == 0)
- {
- printf ("clock %d: time hasn't changed (try %d)\n", cl, i);
- result = 1;
-
- old_ts = ts;
- }
- }
- }
- else
- {
- printf ("clock %d: cannot get time (try %d)\n", cl, i);
- result = 1;
- }
-
- /* Wait a bit before the next iteration. */
- nanosleep (&waitit, NULL);
- }
-
- return result;
-}
-
-static int
-do_test (void)
-{
- clockid_t cl;
- int result;
-
- result = clock_test (CLOCK_REALTIME);
-
- if (clock_getcpuclockid (0, &cl) == 0)
- /* XXX It's not yet a bug when this fails. */
- clock_test (cl);
- else
- printf("CPU clock unavailble, skipping test\n");
-
- return result;
-}
-#define TEST_FUNCTION do_test ()
-
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-clock1.c b/test/nptl/tst-clock1.c
deleted file mode 100644
index 7e483b534..000000000
--- a/test/nptl/tst-clock1.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-
-
-int
-do_test (void)
-{
-#if defined _POSIX_THREAD_CPUTIME && _POSIX_THREAD_CPUTIME >= 0
- clockid_t cl;
- /* This is really only a linking-test here. */
- int e = pthread_getcpuclockid (pthread_self (), &cl);
- if (e != 0)
- {
-# if _POSIX_THREAD_CPUTIME == 0
- if (sysconf (_SC_THREAD_CPUTIME) >= 0)
-# endif
- {
- puts ("cpuclock advertized, but cannot get ID");
- exit (1);
- }
- }
-#endif
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-clock2.c b/test/nptl/tst-clock2.c
deleted file mode 100644
index df6ec00db..000000000
--- a/test/nptl/tst-clock2.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-
-
-#if defined _POSIX_THREAD_CPUTIME && _POSIX_THREAD_CPUTIME >= 0
-static pthread_barrier_t b2;
-static pthread_barrier_t bN;
-
-
-static void *
-tf (void *arg)
-{
- int e = pthread_barrier_wait (&b2);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- e = pthread_barrier_wait (&bN);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- return NULL;
-}
-#endif
-
-
-int
-do_test (void)
-{
-#if defined _POSIX_THREAD_CPUTIME && _POSIX_THREAD_CPUTIME >= 0
-# define N 10
-
-# if _POSIX_THREAD_CPUTIME == 0
- if (sysconf (_SC_THREAD_CPUTIME) < 0)
- {
- puts ("_POSIX_THREAD_CPUTIME option not available");
- return 0;
- }
-# endif
-
- if (pthread_barrier_init (&b2, NULL, 2) != 0
- || pthread_barrier_init (&bN, NULL, N + 1) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- TEMP_FAILURE_RETRY (nanosleep (&ts, &ts));
-
- pthread_t th[N + 1];
- clockid_t cl[N + 1];
-# ifndef CLOCK_THREAD_CPUTIME_ID
- if (pthread_getcpuclockid (pthread_self (), &cl[0]) != 0)
- {
- puts ("own pthread_getcpuclockid failed");
- return 1;
- }
-# else
- cl[0] = CLOCK_THREAD_CPUTIME_ID;
-# endif
-
- pthread_attr_t at;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- int i;
- int e;
- for (i = 0; i < N; ++i)
- {
- if (pthread_create (&th[i], &at, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- e = pthread_barrier_wait (&b2);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- ts.tv_sec = 0;
- ts.tv_nsec = 100000000;
- TEMP_FAILURE_RETRY (nanosleep (&ts, &ts));
-
- if (pthread_getcpuclockid (th[i], &cl[i + 1]) != 0)
- {
- puts ("pthread_getcpuclockid failed");
- return 1;
- }
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- struct timespec t[N + 1];
- for (i = 0; i < N + 1; ++i)
- if (clock_gettime (cl[i], &t[i]) != 0)
- {
- printf ("clock_gettime round %d failed\n", i);
- return 1;
- }
-
- for (i = 0; i < N; ++i)
- {
- struct timespec diff;
-
- diff.tv_sec = t[i].tv_sec - t[i + 1].tv_sec;
- diff.tv_nsec = t[i].tv_nsec - t[i + 1].tv_nsec;
- if (diff.tv_nsec < 0)
- {
- diff.tv_nsec += 1000000000;
- --diff.tv_sec;
- }
-
- if (diff.tv_sec < 0 || (diff.tv_sec == 0 && diff.tv_nsec < 100000000))
- {
- printf ("\
-difference between thread %d and %d too small (%ld.%09ld)\n",
- i, i + 1, (long int) diff.tv_sec, (long int) diff.tv_nsec);
- return 1;
- }
-
- printf ("diff %d->%d: %ld.%09ld\n",
- i, i + 1, (long int) diff.tv_sec, (long int) diff.tv_nsec);
- }
-
- ts.tv_sec = 0;
- ts.tv_nsec = 0;
- for (i = 0; i < N + 1; ++i)
- if (clock_settime (cl[i], &ts) != 0)
- {
- printf ("clock_settime(%d) round %d failed\n", cl[i], i);
- return 1;
- }
-
- for (i = 0; i < N + 1; ++i)
- {
- if (clock_gettime (cl[i], &ts) != 0)
- {
- puts ("clock_gettime failed");
- return 1;
- }
-
- if (ts.tv_sec > t[i].tv_sec
- || (ts.tv_sec == t[i].tv_sec && ts.tv_nsec > t[i].tv_nsec))
- {
- puts ("clock_settime didn't reset clock");
- return 1;
- }
- }
-#endif
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-clock_nanosleep.c b/test/nptl/tst-clock_nanosleep.c
deleted file mode 100644
index a2d1f0085..000000000
--- a/test/nptl/tst-clock_nanosleep.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <time.h>
-
-
-/* Test that clock_nanosleep() does sleep. */
-static int
-do_test (void)
-{
- /* Current time. */
- struct timeval tv1;
- (void) gettimeofday (&tv1, NULL);
-
- struct timespec ts;
- ts.tv_sec = 1;
- ts.tv_nsec = 0;
- TEMP_FAILURE_RETRY (clock_nanosleep (CLOCK_REALTIME, 0, &ts, &ts));
-
- /* At least one second must have passed. */
- struct timeval tv2;
- (void) gettimeofday (&tv2, NULL);
-
- tv2.tv_sec -= tv1.tv_sec;
- tv2.tv_usec -= tv1.tv_usec;
- if (tv2.tv_usec < 0)
- --tv2.tv_sec;
-
- if (tv2.tv_sec < 1)
- {
- puts ("clock_nanosleep didn't sleep long enough");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond-deadlock.c b/test/nptl/tst-cond-deadlock.c
deleted file mode 100644
index dd978fb3d..000000000
--- a/test/nptl/tst-cond-deadlock.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2016 Martin Willi <martin@strongswan.org>
- * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- */
-
-#include <pthread.h>
-
-static pthread_mutex_t m;
-static pthread_cond_t c;
-static pthread_t t;
-static volatile int ready;
-
-static void cancelcb(void *arg)
-{
- pthread_mutex_unlock(&m);
-}
-
-static void* threadcb(void *arg)
-{
- pthread_mutex_lock(&m);
- pthread_cleanup_push(cancelcb, NULL);
-
- ready = 1;
- while (1)
- pthread_cond_wait(&c, &m);
- pthread_cleanup_pop(1);
-}
-
-static int
-do_test (void)
-{
- pthread_mutex_init(&m, NULL);
- pthread_cond_init(&c, NULL);
-
- pthread_create(&t, NULL, threadcb, NULL);
-
- while (!ready);
-
- pthread_cancel(t);
- pthread_join(t, NULL);
-
- pthread_cond_signal(&c);
- pthread_cond_destroy(&c);
- pthread_mutex_destroy(&m);
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 100
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond1.c b/test/nptl/tst-cond1.c
deleted file mode 100644
index 30efe5b5e..000000000
--- a/test/nptl/tst-cond1.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <error.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-
-
-static void *
-tf (void *p)
-{
- int err;
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "child: cannot get mutex");
-
- puts ("child: got mutex; signalling");
-
- pthread_cond_signal (&cond);
-
- puts ("child: unlock");
-
- err = pthread_mutex_unlock (&mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "child: cannot unlock");
-
- puts ("child: done");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
- int err;
-
- printf ("&cond = %p\n&mut = %p\n", &cond, &mut);
-
- puts ("parent: get mutex");
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "parent: cannot get mutex");
-
- puts ("parent: create child");
-
- err = pthread_create (&th, NULL, tf, NULL);
- if (err != 0)
- error (EXIT_FAILURE, err, "parent: cannot create thread");
-
- puts ("parent: wait for condition");
-
- err = pthread_cond_wait (&cond, &mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "parent: cannot wait fir signal");
-
- puts ("parent: got signal");
-
- err = pthread_join (th, NULL);
- if (err != 0)
- error (EXIT_FAILURE, err, "parent: failed to join");
-
- puts ("done");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond10.c b/test/nptl/tst-cond10.c
deleted file mode 100644
index cd5247727..000000000
--- a/test/nptl/tst-cond10.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <error.h>
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-#define N 10
-#define ROUNDS 100
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-static pthread_barrier_t bN1;
-static pthread_barrier_t b2;
-
-
-static void *
-tf (void *p)
-{
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("child: 1st mutex_lock failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b2);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: 1st barrier_wait failed");
- exit (1);
- }
-
- if (pthread_cond_wait (&cond, &mut) != 0)
- {
- puts ("child: cond_wait failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&mut) != 0)
- {
- puts ("child: mutex_unlock failed");
- exit (1);
- }
-
- e = pthread_barrier_wait (&bN1);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: 2nd barrier_wait failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&bN1, NULL, N + 1) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (pthread_barrier_init (&b2, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_attr_t at;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- int r;
- for (r = 0; r < ROUNDS; ++r)
- {
- printf ("round %d\n", r + 1);
-
- int i;
- pthread_t th[N];
- for (i = 0; i < N; ++i)
- {
- if (pthread_create (&th[i], &at, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b2);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent: 1st barrier_wait failed");
- exit (1);
- }
- }
-
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("parent: mutex_lock failed");
- exit (1);
- }
- if (pthread_mutex_unlock (&mut) != 0)
- {
- puts ("parent: mutex_unlock failed");
- exit (1);
- }
-
- /* N single signal calls. Without locking. This tests that no
- signal gets lost. */
- for (i = 0; i < N; ++i)
- if (pthread_cond_signal (&cond) != 0)
- {
- puts ("cond_signal failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&bN1);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent: 2nd barrier_wait failed");
- exit (1);
- }
-
- for (i = 0; i < N; ++i)
- if (pthread_join (th[i], NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond11.c b/test/nptl/tst-cond11.c
deleted file mode 100644
index 4aaf38002..000000000
--- a/test/nptl/tst-cond11.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-
-
-#if defined _POSIX_CLOCK_SELECTION && _POSIX_CLOCK_SELECTION >= 0
-static int
-run_test (clockid_t cl)
-{
- pthread_condattr_t condattr;
- pthread_cond_t cond;
- pthread_mutexattr_t mutattr;
- pthread_mutex_t mut;
-
- printf ("clock = %d\n", (int) cl);
-
- if (pthread_condattr_init (&condattr) != 0)
- {
- puts ("condattr_init failed");
- return 1;
- }
-
- if (pthread_condattr_setclock (&condattr, cl) != 0)
- {
- puts ("condattr_setclock failed");
- return 1;
- }
-
- clockid_t cl2;
- if (pthread_condattr_getclock (&condattr, &cl2) != 0)
- {
- puts ("condattr_getclock failed");
- return 1;
- }
- if (cl != cl2)
- {
- printf ("condattr_getclock returned wrong value: %d, expected %d\n",
- (int) cl2, (int) cl);
- return 1;
- }
-
- if (pthread_cond_init (&cond, &condattr) != 0)
- {
- puts ("cond_init failed");
- return 1;
- }
-
- if (pthread_condattr_destroy (&condattr) != 0)
- {
- puts ("condattr_destroy failed");
- return 1;
- }
-
- if (pthread_mutexattr_init (&mutattr) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_settype (&mutattr, PTHREAD_MUTEX_ERRORCHECK) != 0)
- {
- puts ("mutexattr_settype failed");
- return 1;
- }
-
- if (pthread_mutex_init (&mut, &mutattr) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_destroy (&mutattr) != 0)
- {
- puts ("mutexattr_destroy failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&mut) != EDEADLK)
- {
- puts ("2nd mutex_lock did not return EDEADLK");
- return 1;
- }
-
- struct timespec ts;
- if (clock_gettime (cl, &ts) != 0)
- {
- puts ("clock_gettime failed");
- return 1;
- }
-
- /* Wait one second. */
- ++ts.tv_sec;
-
- int e = pthread_cond_timedwait (&cond, &mut, &ts);
- if (e == 0)
- {
- puts ("cond_timedwait succeeded");
- return 1;
- }
- else if (e != ETIMEDOUT)
- {
- puts ("cond_timedwait did not return ETIMEDOUT");
- return 1;
- }
-
- if (pthread_mutex_unlock (&mut) != 0)
- {
- puts ("mutex_unlock failed");
- return 1;
- }
-
- if (pthread_mutex_destroy (&mut) != 0)
- {
- puts ("mutex_destroy failed");
- return 1;
- }
-
- if (pthread_cond_destroy (&cond) != 0)
- {
- puts ("cond_destroy failed");
- return 1;
- }
-
- return 0;
-}
-#endif
-
-
-static int
-do_test (void)
-{
-#if !defined _POSIX_CLOCK_SELECTION || _POSIX_CLOCK_SELECTION == -1
-
- puts ("_POSIX_CLOCK_SELECTION not supported, test skipped");
- return 0;
-
-#else
-
- int res = run_test (CLOCK_REALTIME);
-
-# if defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0
-# if _POSIX_MONOTONIC_CLOCK == 0
- int e = sysconf (_SC_MONOTONIC_CLOCK);
- if (e < 0)
- puts ("CLOCK_MONOTONIC not supported");
- else if (e == 0)
- {
- puts ("sysconf (_SC_MONOTONIC_CLOCK) must not return 0");
- res = 1;
- }
- else
-# endif
- res |= run_test (CLOCK_MONOTONIC);
-# else
- puts ("_POSIX_MONOTONIC_CLOCK not defined");
-# endif
-
- return res;
-#endif
-}
-
-#define TIMEOUT 3
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond12.c b/test/nptl/tst-cond12.c
deleted file mode 100644
index b38d9d5ec..000000000
--- a/test/nptl/tst-cond12.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static char fname[] = "/tmp/tst-cond12-XXXXXX";
-static int fd;
-
-
-static void prepare (void);
-#define PREPARE(argc, argv) prepare ()
-
-static int do_test (void);
-#define TEST_FUNCTION do_test ()
-
-#include "../test-skeleton.c"
-
-
-static void
-prepare (void)
-{
- fd = mkstemp (fname);
- if (fd == -1)
- {
- printf ("mkstemp failed: %m\n");
- exit (1);
- }
- add_temp_file (fname);
- if (ftruncate (fd, 1000) < 0)
- {
- printf ("ftruncate failed: %m\n");
- exit (1);
- }
-}
-
-
-static int
-do_test (void)
-{
- struct
- {
- pthread_mutex_t m;
- pthread_cond_t c;
- int var;
- } *p = mmap (NULL, sizeof (*p), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
- if (p == MAP_FAILED)
- {
- printf ("initial mmap failed: %m\n");
- return 1;
- }
-
- pthread_mutexattr_t ma;
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
- if (pthread_mutexattr_setpshared (&ma, 1) != 0)
- {
- puts ("mutexattr_setpshared failed");
- return 1;
- }
- if (pthread_mutex_init (&p->m, &ma) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
- if (pthread_mutexattr_destroy (&ma) != 0)
- {
- puts ("mutexattr_destroy failed");
- return 1;
- }
-
- pthread_condattr_t ca;
- if (pthread_condattr_init (&ca) != 0)
- {
- puts ("condattr_init failed");
- return 1;
- }
- if (pthread_condattr_setpshared (&ca, 1) != 0)
- {
- puts ("condattr_setpshared failed");
- return 1;
- }
- if (pthread_cond_init (&p->c, &ca) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
- if (pthread_condattr_destroy (&ca) != 0)
- {
- puts ("condattr_destroy failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&p->m) != 0)
- {
- puts ("initial mutex_lock failed");
- return 1;
- }
-
- p->var = 42;
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- printf ("fork failed: %m\n");
- return 1;
- }
-
- if (pid == 0)
- {
- void *oldp = p;
- p = mmap (NULL, sizeof (*p), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
-
- if (p == oldp)
- {
- puts ("child: mapped to same address");
- kill (getppid (), SIGKILL);
- exit (1);
- }
-
- munmap (oldp, sizeof (*p));
-
- if (pthread_mutex_lock (&p->m) != 0)
- {
- puts ("child: mutex_lock failed");
- kill (getppid (), SIGKILL);
- exit (1);
- }
-
- p->var = 0;
-
-#ifndef USE_COND_SIGNAL
- if (pthread_cond_broadcast (&p->c) != 0)
- {
- puts ("child: cond_broadcast failed");
- kill (getppid (), SIGKILL);
- exit (1);
- }
-#else
- if (pthread_cond_signal (&p->c) != 0)
- {
- puts ("child: cond_signal failed");
- kill (getppid (), SIGKILL);
- exit (1);
- }
-#endif
-
- if (pthread_mutex_unlock (&p->m) != 0)
- {
- puts ("child: mutex_unlock failed");
- kill (getppid (), SIGKILL);
- exit (1);
- }
-
- exit (0);
- }
-
- do
- pthread_cond_wait (&p->c, &p->m);
- while (p->var != 0);
-
- if (TEMP_FAILURE_RETRY (waitpid (pid, NULL, 0)) != pid)
- {
- printf ("waitpid failed: %m\n");
- kill (pid, SIGKILL);
- return 1;
- }
-
- return 0;
-}
diff --git a/test/nptl/tst-cond13.c b/test/nptl/tst-cond13.c
deleted file mode 100644
index 29d79b533..000000000
--- a/test/nptl/tst-cond13.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define USE_COND_SIGNAL 1
-#include "tst-cond12.c"
diff --git a/test/nptl/tst-cond14.c b/test/nptl/tst-cond14.c
deleted file mode 100644
index 837840582..000000000
--- a/test/nptl/tst-cond14.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-static pthread_mutex_t mut2 = PTHREAD_MUTEX_INITIALIZER;
-
-static void *
-tf (void *p)
-{
- if (pthread_mutex_lock (&mut) != 0)
- {
- printf ("%s: 1st mutex_lock failed\n", __func__);
- exit (1);
- }
- if (pthread_mutex_lock (&mut) != 0)
- {
- printf ("%s: 2nd mutex_lock failed\n", __func__);
- exit (1);
- }
- if (pthread_mutex_lock (&mut) != 0)
- {
- printf ("%s: 3rd mutex_lock failed\n", __func__);
- exit (1);
- }
-
- if (pthread_mutex_unlock (&mut2) != 0)
- {
- printf ("%s: mutex_unlock failed\n", __func__);
- exit (1);
- }
-
- if (pthread_cond_wait (&cond, &mut) != 0)
- {
- printf ("%s: cond_wait failed\n", __func__);
- exit (1);
- }
-
- puts ("child: done");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_mutex_lock (&mut2) != 0)
- {
- puts ("1st mutex_lock failed");
- return 1;
- }
-
- puts ("parent: create child");
-
- pthread_t th;
- int err = pthread_create (&th, NULL, tf, NULL);
- if (err != 0)
- {
- printf ("parent: cannot create thread: %s\n", strerror (err));
- return 1;
- }
-
- /* We have to synchronize with the child. */
- if (pthread_mutex_lock (&mut2) != 0)
- {
- puts ("2nd mutex_lock failed");
- return 1;
- }
-
- /* Give the child to reach to pthread_cond_wait. */
- sleep (1);
-
- if (pthread_cond_signal (&cond) != 0)
- {
- puts ("cond_signal failed");
- return 1;
- }
-
- err = pthread_join (th, NULL);
- if (err != 0)
- {
- printf ("parent: failed to join: %s\n", strerror (err));
- return 1;
- }
-
- puts ("done");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 3
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond15.c b/test/nptl/tst-cond15.c
deleted file mode 100644
index 0e8448c11..000000000
--- a/test/nptl/tst-cond15.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-static pthread_mutex_t mut2 = PTHREAD_MUTEX_INITIALIZER;
-
-static void *
-tf (void *p)
-{
- if (pthread_mutex_lock (&mut) != 0)
- {
- printf ("%s: 1st mutex_lock failed\n", __func__);
- exit (1);
- }
- if (pthread_mutex_lock (&mut) != 0)
- {
- printf ("%s: 2nd mutex_lock failed\n", __func__);
- exit (1);
- }
- if (pthread_mutex_lock (&mut) != 0)
- {
- printf ("%s: 3rd mutex_lock failed\n", __func__);
- exit (1);
- }
-
- if (pthread_mutex_unlock (&mut2) != 0)
- {
- printf ("%s: mutex_unlock failed\n", __func__);
- exit (1);
- }
-
- struct timeval tv;
- gettimeofday (&tv, NULL);
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += p == NULL ? 100 : 1;
-
- int err = pthread_cond_timedwait (&cond, &mut, &ts);
- if ((err != 0 && p == NULL) || (err != ETIMEDOUT && p != NULL))
- {
- printf ("%s: cond_wait failed\n", __func__);
- exit (1);
- }
-
- if (pthread_mutex_unlock (&mut) != 0)
- {
- printf ("%s: 1st mutex_unlock failed\n", __func__);
- exit (1);
- }
- if (pthread_mutex_unlock (&mut) != 0)
- {
- printf ("%s: 2nd mutex_unlock failed\n", __func__);
- exit (1);
- }
- if (pthread_mutex_unlock (&mut) != 0)
- {
- printf ("%s: 3rd mutex_unlock failed\n", __func__);
- exit (1);
- }
-
- puts ("child: done");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_mutex_lock (&mut2) != 0)
- {
- puts ("1st mutex_lock failed");
- return 1;
- }
-
- puts ("parent: create 1st child");
-
- pthread_t th;
- int err = pthread_create (&th, NULL, tf, NULL);
- if (err != 0)
- {
- printf ("parent: cannot 1st create thread: %s\n", strerror (err));
- return 1;
- }
-
- /* We have to synchronize with the child. */
- if (pthread_mutex_lock (&mut2) != 0)
- {
- puts ("2nd mutex_lock failed");
- return 1;
- }
-
- /* Give the child to reach to pthread_cond_wait. */
- sleep (1);
-
- if (pthread_cond_signal (&cond) != 0)
- {
- puts ("cond_signal failed");
- return 1;
- }
-
- err = pthread_join (th, NULL);
- if (err != 0)
- {
- printf ("parent: failed to join: %s\n", strerror (err));
- return 1;
- }
-
-
- puts ("parent: create 2nd child");
-
- err = pthread_create (&th, NULL, tf, (void *) 1l);
- if (err != 0)
- {
- printf ("parent: cannot 2nd create thread: %s\n", strerror (err));
- return 1;
- }
-
- err = pthread_join (th, NULL);
- if (err != 0)
- {
- printf ("parent: failed to join: %s\n", strerror (err));
- return 1;
- }
-
- puts ("done");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 6
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond16.c b/test/nptl/tst-cond16.c
deleted file mode 100644
index 44b98634b..000000000
--- a/test/nptl/tst-cond16.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-pthread_cond_t cv = PTHREAD_COND_INITIALIZER;
-pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-bool n, exiting;
-FILE *f;
-int count;
-
-void *
-tf (void *dummy)
-{
- bool loop = true;
-
- while (loop)
- {
- pthread_mutex_lock (&lock);
- while (n && !exiting)
- pthread_cond_wait (&cv, &lock);
- n = true;
- pthread_mutex_unlock (&lock);
-
- fputs (".", f);
-
- pthread_mutex_lock (&lock);
- n = false;
- if (exiting)
- loop = false;
-#ifdef UNLOCK_AFTER_BROADCAST
- pthread_cond_broadcast (&cv);
- pthread_mutex_unlock (&lock);
-#else
- pthread_mutex_unlock (&lock);
- pthread_cond_broadcast (&cv);
-#endif
- }
-
- return NULL;
-}
-
-int
-do_test (void)
-{
- f = fopen ("/dev/null", "w");
- if (f == NULL)
- {
- printf ("couldn't open /dev/null, %m\n");
- return 1;
- }
-
- count = sysconf (_SC_NPROCESSORS_ONLN);
- if (count <= 0)
- count = 1;
- count *= 4;
-
- pthread_t th[count];
- int i, ret;
- for (i = 0; i < count; ++i)
- if ((ret = pthread_create (&th[i], NULL, tf, NULL)) != 0)
- {
- errno = ret;
- printf ("pthread_create %d failed: %m\n", i);
- return 1;
- }
-
- struct timespec ts = { .tv_sec = 20, .tv_nsec = 0 };
- while (nanosleep (&ts, &ts) != 0);
-
- pthread_mutex_lock (&lock);
- exiting = true;
- pthread_mutex_unlock (&lock);
-
- for (i = 0; i < count; ++i)
- pthread_join (th[i], NULL);
-
- fclose (f);
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 40
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond17.c b/test/nptl/tst-cond17.c
deleted file mode 100644
index 0586fa59a..000000000
--- a/test/nptl/tst-cond17.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define UNLOCK_AFTER_BROADCAST 1
-#include "tst-cond16.c"
diff --git a/test/nptl/tst-cond18.c b/test/nptl/tst-cond18.c
deleted file mode 100644
index a1bb947ac..000000000
--- a/test/nptl/tst-cond18.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-pthread_cond_t cv = PTHREAD_COND_INITIALIZER;
-pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-bool exiting;
-int fd, count, spins, nn;
-
-void *
-tf (void *id)
-{
- pthread_mutex_lock (&lock);
-
- if ((long) id == 0)
- {
- while (!exiting)
- {
- if ((spins++ % 1000) == 0)
- write (fd, ".", 1);
- pthread_mutex_unlock (&lock);
-
- pthread_mutex_lock (&lock);
- int njobs = rand () % (count + 1);
- nn = njobs;
- if ((rand () % 30) == 0)
- pthread_cond_broadcast (&cv);
- else
- while (njobs--)
- pthread_cond_signal (&cv);
- }
-
- pthread_cond_broadcast (&cv);
- }
- else
- {
- while (!exiting)
- {
- while (!nn && !exiting)
- pthread_cond_wait (&cv, &lock);
- --nn;
- pthread_mutex_unlock (&lock);
-
- pthread_mutex_lock (&lock);
- }
- }
-
- pthread_mutex_unlock (&lock);
- return NULL;
-}
-
-int
-do_test (void)
-{
- fd = open ("/dev/null", O_WRONLY);
- if (fd < 0)
- {
- printf ("couldn't open /dev/null, %m\n");
- return 1;
- }
-
- count = sysconf (_SC_NPROCESSORS_ONLN);
- if (count <= 0)
- count = 1;
- count *= 8;
-
- pthread_t th[count + 1];
- int i, ret;
-
- for (i = 0; i <= count; ++i)
- if ((ret = pthread_create (&th[i], NULL, tf, (void *) (long) i)) != 0)
- {
- errno = ret;
- printf ("pthread_create %d failed: %m\n", i);
- return 1;
- }
-
- struct timespec ts = { .tv_sec = 20, .tv_nsec = 0 };
- while (nanosleep (&ts, &ts) != 0);
-
- pthread_mutex_lock (&lock);
- exiting = true;
- pthread_mutex_unlock (&lock);
-
- for (i = 0; i < count; ++i)
- pthread_join (th[i], NULL);
-
- close (fd);
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 40
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond19.c b/test/nptl/tst-cond19.c
deleted file mode 100644
index 200e0eaf0..000000000
--- a/test/nptl/tst-cond19.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-
-
-static int
-do_test (void)
-{
- int result = 0;
- struct timespec ts;
-
- if (clock_gettime (CLOCK_REALTIME, &ts) != 0)
- {
- puts ("clock_gettime failed");
- return 1;
- }
-
- ts.tv_nsec = -1;
-
- int e = pthread_cond_timedwait (&cond, &mut, &ts);
- if (e == 0)
- {
- puts ("first cond_timedwait did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("first cond_timedwait did not return EINVAL");
- result = 1;
- }
-
- ts.tv_nsec = 2000000000;
-
- e = pthread_cond_timedwait (&cond, &mut, &ts);
- if (e == 0)
- {
- puts ("second cond_timedwait did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("second cond_timedwait did not return EINVAL");
- result = 1;
- }
-
- return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond2.c b/test/nptl/tst-cond2.c
deleted file mode 100644
index 1da074cdd..000000000
--- a/test/nptl/tst-cond2.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <error.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-
-static pthread_barrier_t bar;
-
-
-static void *
-tf (void *a)
-{
- int i = (long int) a;
- int err;
-
- printf ("child %d: lock\n", i);
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "locking in child failed");
-
- printf ("child %d: sync\n", i);
-
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: barrier_wait failed");
- exit (1);
- }
-
- printf ("child %d: wait\n", i);
-
- err = pthread_cond_wait (&cond, &mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "child %d: failed to wait", i);
-
- printf ("child %d: woken up\n", i);
-
- err = pthread_mutex_unlock (&mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "child %d: unlock[2] failed", i);
-
- printf ("child %d: done\n", i);
-
- return NULL;
-}
-
-
-#define N 10
-
-
-static int
-do_test (void)
-{
- pthread_t th[N];
- int i;
- int err;
-
- printf ("&cond = %p\n&mut = %p\n", &cond, &mut);
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_attr_t at;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- for (i = 0; i < N; ++i)
- {
- printf ("create thread %d\n", i);
-
- err = pthread_create (&th[i], &at, tf, (void *) (long int) i);
- if (err != 0)
- error (EXIT_FAILURE, err, "cannot create thread %d", i);
-
- printf ("wait for child %d\n", i);
-
- /* Wait for the child to start up and get the mutex for the
- conditional variable. */
- int e = pthread_barrier_wait (&bar);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- puts ("get lock outselves");
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "mut locking failed");
-
- puts ("broadcast");
-
- /* Wake up all threads. */
- err = pthread_cond_broadcast (&cond);
- if (err != 0)
- error (EXIT_FAILURE, err, "parent: broadcast failed");
-
- err = pthread_mutex_unlock (&mut);
- if (err != 0)
- error (EXIT_FAILURE, err, "mut unlocking failed");
-
- /* Join all threads. */
- for (i = 0; i < N; ++i)
- {
- printf ("join thread %d\n", i);
-
- err = pthread_join (th[i], NULL);
- if (err != 0)
- error (EXIT_FAILURE, err, "join of child %d failed", i);
- }
-
- puts ("done");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond20.c b/test/nptl/tst-cond20.c
deleted file mode 100644
index c1341a07b..000000000
--- a/test/nptl/tst-cond20.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define N 10
-#define ROUNDS 1000
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_cond_t cond2 = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-static pthread_barrier_t b;
-static int count;
-
-static void *
-tf (void *p)
-{
- int i;
- for (i = 0; i < ROUNDS; ++i)
- {
- pthread_mutex_lock (&mut);
-
- if (++count == N)
- pthread_cond_signal (&cond2);
-
-#ifdef TIMED
- struct timeval tv;
- gettimeofday (&tv, NULL);
- struct timespec ts;
- /* Wait three seconds. */
- ts.tv_sec = tv.tv_sec + 3;
- ts.tv_nsec = tv.tv_usec * 1000;
- pthread_cond_timedwait (&cond, &mut, &ts);
-#else
- pthread_cond_wait (&cond, &mut);
-#endif
-
- pthread_mutex_unlock (&mut);
-
- int err = pthread_barrier_wait (&b);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: barrier_wait failed");
- exit (1);
- }
-
- err = pthread_barrier_wait (&b);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: barrier_wait failed");
- exit (1);
- }
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&b, NULL, N + 1) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- pthread_mutex_lock (&mut);
-
- int i, j, err;
- pthread_t th[N];
- for (i = 0; i < N; ++i)
- if ((err = pthread_create (&th[i], NULL, tf, NULL)) != 0)
- {
- printf ("cannot create thread %d: %s\n", i, strerror (err));
- return 1;
- }
-
- for (i = 0; i < ROUNDS; ++i)
- {
- pthread_cond_wait (&cond2, &mut);
-
- if (i & 1)
- pthread_mutex_unlock (&mut);
-
- if (i & 2)
- pthread_cond_broadcast (&cond);
- else if (i & 4)
- for (j = 0; j < N; ++j)
- pthread_cond_signal (&cond);
- else
- {
- for (j = 0; j < (i / 8) % N; ++j)
- pthread_cond_signal (&cond);
- pthread_cond_broadcast (&cond);
- }
-
- if ((i & 1) == 0)
- pthread_mutex_unlock (&mut);
-
- err = pthread_cond_destroy (&cond);
- if (err)
- {
- printf ("pthread_cond_destroy failed: %s\n", strerror (err));
- return 1;
- }
-
- /* Now clobber the cond variable which has been successfully
- destroyed above. */
- memset (&cond, (char) i, sizeof (cond));
-
- err = pthread_barrier_wait (&b);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent: barrier_wait failed");
- return 1;
- }
-
- pthread_mutex_lock (&mut);
-
- err = pthread_barrier_wait (&b);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent: barrier_wait failed");
- return 1;
- }
-
- count = 0;
- err = pthread_cond_init (&cond, NULL);
- if (err)
- {
- printf ("pthread_cond_init failed: %s\n", strerror (err));
- return 1;
- }
- }
-
- for (i = 0; i < N; ++i)
- if ((err = pthread_join (th[i], NULL)) != 0)
- {
- printf ("failed to join thread %d: %s\n", i, strerror (err));
- return 1;
- }
-
- puts ("done");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond21.c b/test/nptl/tst-cond21.c
deleted file mode 100644
index 89cb771b5..000000000
--- a/test/nptl/tst-cond21.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <sys/time.h>
-#define TIMED 1
-#include "tst-cond20.c"
diff --git a/test/nptl/tst-cond22.c b/test/nptl/tst-cond22.c
deleted file mode 100644
index bd978e50c..000000000
--- a/test/nptl/tst-cond22.c
+++ /dev/null
@@ -1,160 +0,0 @@
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_barrier_t b;
-static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
-
-
-static void
-cl (void *arg)
-{
- pthread_mutex_unlock (&m);
-}
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_mutex_lock (&m) != 0)
- {
- printf ("%s: mutex_lock failed\n", __func__);
- exit (1);
- }
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("%s: barrier_wait failed\n", __func__);
- exit (1);
- }
- pthread_cleanup_push (cl, NULL);
- /* We have to loop here because the cancellation might come after
- the cond_wait call left the cancelable area and is then waiting
- on the mutex. In this case the beginning of the second cond_wait
- call will cause the cancellation to happen. */
- do
- if (pthread_cond_wait (&c, &m) != 0)
- {
- printf ("%s: cond_wait failed\n", __func__);
- exit (1);
- }
- while (arg == NULL);
- pthread_cleanup_pop (0);
- if (pthread_mutex_unlock (&m) != 0)
- {
- printf ("%s: mutex_unlock failed\n", __func__);
- exit (1);
- }
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- int status = 0;
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("1st create failed");
- return 1;
- }
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- return 1;
- }
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("1st mutex_lock failed");
- return 1;
- }
- if (pthread_cond_signal (&c) != 0)
- {
- puts ("1st cond_signal failed");
- return 1;
- }
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("1st mutex_unlock failed");
- return 1;
- }
- void *res;
- if (pthread_join (th, &res) != 0)
- {
- puts ("1st join failed");
- return 1;
- }
- if (res != PTHREAD_CANCELED)
- {
- puts ("first thread not canceled");
- status = 1;
- }
-
- printf ("cond = { %d, %x, %lld, %lld, %lld, %p, %u, %u }\n",
- c.__data.__lock, c.__data.__futex, c.__data.__total_seq,
- c.__data.__wakeup_seq, c.__data.__woken_seq, c.__data.__mutex,
- c.__data.__nwaiters, c.__data.__broadcast_seq);
-
- if (pthread_create (&th, NULL, tf, (void *) 1l) != 0)
- {
- puts ("2nd create failed");
- return 1;
- }
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("2nd barrier_wait failed");
- return 1;
- }
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("2nd mutex_lock failed");
- return 1;
- }
- if (pthread_cond_signal (&c) != 0)
- {
- puts ("2nd cond_signal failed");
- return 1;
- }
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("2nd mutex_unlock failed");
- return 1;
- }
- if (pthread_join (th, &res) != 0)
- {
- puts ("2nd join failed");
- return 1;
- }
- if (res != NULL)
- {
- puts ("2nd thread canceled");
- status = 1;
- }
-
- printf ("cond = { %d, %x, %lld, %lld, %lld, %p, %u, %u }\n",
- c.__data.__lock, c.__data.__futex, c.__data.__total_seq,
- c.__data.__wakeup_seq, c.__data.__woken_seq, c.__data.__mutex,
- c.__data.__nwaiters, c.__data.__broadcast_seq);
-
- return status;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond23.c b/test/nptl/tst-cond23.c
deleted file mode 100644
index fb2936f00..000000000
--- a/test/nptl/tst-cond23.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* Copyright (C) 2008 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2008.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-
-
-#if defined _POSIX_CLOCK_SELECTION && _POSIX_CLOCK_SELECTION >= 0
-static int
-check (pthread_condattr_t *condattr, int pshared, clockid_t cl)
-{
- clockid_t cl2;
- if (pthread_condattr_getclock (condattr, &cl2) != 0)
- {
- puts ("condattr_getclock failed");
- return 1;
- }
- if (cl != cl2)
- {
- printf ("condattr_getclock returned wrong value: %d, expected %d\n",
- (int) cl2, (int) cl);
- return 1;
- }
-
- int p;
- if (pthread_condattr_getpshared (condattr, &p) != 0)
- {
- puts ("condattr_getpshared failed");
- return 1;
- }
- else if (p != pshared)
- {
- printf ("condattr_getpshared returned wrong value: %d, expected %d\n",
- p, pshared);
- return 1;
- }
-
- return 0;
-}
-
-static int
-run_test (clockid_t cl)
-{
- pthread_condattr_t condattr;
-
- printf ("clock = %d\n", (int) cl);
-
- if (pthread_condattr_init (&condattr) != 0)
- {
- puts ("condattr_init failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_PRIVATE, CLOCK_REALTIME))
- return 1;
-
- if (pthread_condattr_setpshared (&condattr, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("1st condattr_setpshared failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_SHARED, CLOCK_REALTIME))
- return 1;
-
- if (pthread_condattr_setclock (&condattr, cl) != 0)
- {
- puts ("1st condattr_setclock failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_SHARED, cl))
- return 1;
-
- if (pthread_condattr_setpshared (&condattr, PTHREAD_PROCESS_PRIVATE) != 0)
- {
- puts ("2nd condattr_setpshared failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_PRIVATE, cl))
- return 1;
-
- if (pthread_condattr_setclock (&condattr, CLOCK_REALTIME) != 0)
- {
- puts ("2nd condattr_setclock failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_PRIVATE, CLOCK_REALTIME))
- return 1;
-
- if (pthread_condattr_setclock (&condattr, cl) != 0)
- {
- puts ("3rd condattr_setclock failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_PRIVATE, cl))
- return 1;
-
- if (pthread_condattr_setpshared (&condattr, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("3rd condattr_setpshared failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_SHARED, cl))
- return 1;
-
- if (pthread_condattr_setclock (&condattr, CLOCK_REALTIME) != 0)
- {
- puts ("4th condattr_setclock failed");
- return 1;
- }
-
- if (check (&condattr, PTHREAD_PROCESS_SHARED, CLOCK_REALTIME))
- return 1;
-
- if (pthread_condattr_destroy (&condattr) != 0)
- {
- puts ("condattr_destroy failed");
- return 1;
- }
-
- return 0;
-}
-#endif
-
-
-static int
-do_test (void)
-{
-#if !defined _POSIX_CLOCK_SELECTION || _POSIX_CLOCK_SELECTION == -1
-
- puts ("_POSIX_CLOCK_SELECTION not supported, test skipped");
- return 0;
-
-#else
-
- int res = run_test (CLOCK_REALTIME);
-
-# if defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0
-# if _POSIX_MONOTONIC_CLOCK == 0
- int e = sysconf (_SC_MONOTONIC_CLOCK);
- if (e < 0)
- puts ("CLOCK_MONOTONIC not supported");
- else if (e == 0)
- {
- puts ("sysconf (_SC_MONOTONIC_CLOCK) must not return 0");
- res = 1;
- }
- else
-# endif
- res |= run_test (CLOCK_MONOTONIC);
-# else
- puts ("_POSIX_MONOTONIC_CLOCK not defined");
-# endif
-
- return res;
-#endif
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond3.c b/test/nptl/tst-cond3.c
deleted file mode 100644
index b18183121..000000000
--- a/test/nptl/tst-cond3.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-/* Note that this test requires more than the standard. It is
- required that there are no spurious wakeups if only more readers
- are added. This is a reasonable demand. */
-
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-
-
-#define N 10
-
-
-static void *
-tf (void *arg)
-{
- int i = (long int) arg;
- int err;
-
- /* Get the mutex. */
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- {
- printf ("child %d mutex_lock failed: %s\n", i, strerror (err));
- exit (1);
- }
-
- /* This call should never return. */
- pthread_cond_wait (&cond, &mut);
-
- /* We should never get here. */
- exit (1);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- int err;
- int i;
-
- for (i = 0; i < N; ++i)
- {
- pthread_t th;
-
- if (i != 0)
- {
- /* Release the mutex. */
- err = pthread_mutex_unlock (&mut);
- if (err != 0)
- {
- printf ("mutex_unlock %d failed: %s\n", i, strerror (err));
- return 1;
- }
- }
-
- err = pthread_create (&th, NULL, tf, (void *) (long int) i);
- if (err != 0)
- {
- printf ("create %d failed: %s\n", i, strerror (err));
- return 1;
- }
-
- /* Get the mutex. */
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- {
- printf ("mutex_lock %d failed: %s\n", i, strerror (err));
- return 1;
- }
- }
-
- /* Set an alarm for 1 second. The wrapper will expect this. */
- alarm (1);
-
- /* This call should never return. */
- pthread_cond_wait (&cond, &mut);
-
- puts ("cond_wait returned");
- return 1;
-}
-
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond4.c b/test/nptl/tst-cond4.c
deleted file mode 100644
index 47a7380de..000000000
--- a/test/nptl/tst-cond4.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-#include <stdint.h>
-
-
-int *condition;
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-cond4.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_mutexattr_t ma;
- pthread_mutex_t *mut1;
- pthread_mutex_t *mut2;
- pthread_condattr_t ca;
- pthread_cond_t *cond;
- pid_t pid;
- int result = 0;
- int p;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- mut1 = (pthread_mutex_t *) (((uintptr_t) mem
- + __alignof (pthread_mutex_t))
- & ~(__alignof (pthread_mutex_t) - 1));
- mut2 = mut1 + 1;
-
- cond = (pthread_cond_t *) (((uintptr_t) (mut2 + 1)
- + __alignof (pthread_cond_t))
- & ~(__alignof (pthread_cond_t) - 1));
-
- condition = (int *) (((uintptr_t) (cond + 1) + __alignof (int))
- & ~(__alignof (int) - 1));
-
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_getpshared (&ma, &p) != 0)
- {
- puts ("1st mutexattr_getpshared failed");
- return 1;
- }
-
- if (p != PTHREAD_PROCESS_PRIVATE)
- {
- puts ("default pshared value wrong");
- return 1;
- }
-
- if (pthread_mutexattr_setpshared (&ma, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("mutexattr_setpshared failed");
- return 1;
- }
-
- if (pthread_mutexattr_getpshared (&ma, &p) != 0)
- {
- puts ("2nd mutexattr_getpshared failed");
- return 1;
- }
-
- if (p != PTHREAD_PROCESS_SHARED)
- {
- puts ("pshared value after setpshared call wrong");
- return 1;
- }
-
- if (pthread_mutex_init (mut1, &ma) != 0)
- {
- puts ("1st mutex_init failed");
- return 1;
- }
-
- if (pthread_mutex_init (mut2, &ma) != 0)
- {
- puts ("2nd mutex_init failed");
- return 1;
- }
-
- if (pthread_condattr_init (&ca) != 0)
- {
- puts ("condattr_init failed");
- return 1;
- }
-
- if (pthread_condattr_getpshared (&ca, &p) != 0)
- {
- puts ("1st condattr_getpshared failed");
- return 1;
- }
-
- if (p != PTHREAD_PROCESS_PRIVATE)
- {
- puts ("default value for pshared in condattr wrong");
- return 1;
- }
-
- if (pthread_condattr_setpshared (&ca, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("condattr_setpshared failed");
- return 1;
- }
-
- if (pthread_condattr_getpshared (&ca, &p) != 0)
- {
- puts ("2nd condattr_getpshared failed");
- return 1;
- }
-
- if (p != PTHREAD_PROCESS_SHARED)
- {
- puts ("pshared condattr still not set");
- return 1;
- }
-
- if (pthread_cond_init (cond, &ca) != 0)
- {
- puts ("cond_init failed");
- return 1;
- }
-
- if (pthread_mutex_lock (mut1) != 0)
- {
- puts ("parent: 1st mutex_lock failed");
- return 1;
- }
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- else if (pid == 0)
- {
- if (pthread_mutex_lock (mut2) != 0)
- {
- puts ("child: mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutex_unlock (mut1) != 0)
- {
- puts ("child: 1st mutex_unlock failed");
- return 1;
- }
-
- do
- if (pthread_cond_wait (cond, mut2) != 0)
- {
- puts ("child: cond_wait failed");
- return 1;
- }
- while (*condition == 0);
-
- if (pthread_mutex_unlock (mut2) != 0)
- {
- puts ("child: 2nd mutex_unlock failed");
- return 1;
- }
-
- puts ("child done");
- }
- else
- {
- int status;
-
- if (pthread_mutex_lock (mut1) != 0)
- {
- puts ("parent: 2nd mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutex_lock (mut2) != 0)
- {
- puts ("parent: 3rd mutex_lock failed");
- return 1;
- }
-
- if (pthread_cond_signal (cond) != 0)
- {
- puts ("parent: cond_signal failed");
- return 1;
- }
-
- *condition = 1;
-
- if (pthread_mutex_unlock (mut2) != 0)
- {
- puts ("parent: mutex_unlock failed");
- return 1;
- }
-
- puts ("waiting for child");
-
- waitpid (pid, &status, 0);
- result |= status;
-
- puts ("parent done");
- }
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond5.c b/test/nptl/tst-cond5.c
deleted file mode 100644
index 7da5b4110..000000000
--- a/test/nptl/tst-cond5.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <sys/time.h>
-
-
-static pthread_mutex_t mut;
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-
-
-static int
-do_test (void)
-{
- pthread_mutexattr_t ma;
- int err;
- struct timespec ts;
- struct timeval tv;
-
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("mutexattr_init failed");
- exit (1);
- }
-
- if (pthread_mutexattr_settype (&ma, PTHREAD_MUTEX_ERRORCHECK) != 0)
- {
- puts ("mutexattr_settype failed");
- exit (1);
- }
-
- if (pthread_mutex_init (&mut, &ma) != 0)
- {
- puts ("mutex_init failed");
- exit (1);
- }
-
- /* Get the mutex. */
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- /* Waiting for the condition will fail. But we want the timeout here. */
- if (gettimeofday (&tv, NULL) != 0)
- {
- puts ("gettimeofday failed");
- exit (1);
- }
-
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_nsec += 500000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
- err = pthread_cond_timedwait (&cond, &mut, &ts);
- if (err == 0)
- {
- /* This could in theory happen but here without any signal and
- additional waiter it should not. */
- puts ("cond_timedwait succeeded");
- exit (1);
- }
- else if (err != ETIMEDOUT)
- {
- printf ("cond_timedwait returned with %s\n", strerror (err));
- exit (1);
- }
-
- err = pthread_mutex_unlock (&mut);
- if (err != 0)
- {
- printf ("mutex_unlock failed: %s\n", strerror (err));
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond6.c b/test/nptl/tst-cond6.c
deleted file mode 100644
index f28d4c157..000000000
--- a/test/nptl/tst-cond6.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <stdint.h>
-
-
-int *condition;
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-cond6.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_mutexattr_t ma;
- pthread_mutex_t *mut1;
- pthread_mutex_t *mut2;
- pthread_condattr_t ca;
- pthread_cond_t *cond;
- pid_t pid;
- int result = 0;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- exit (1);
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- exit (1);
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- exit (1);
- }
-
- mut1 = (pthread_mutex_t *) (((uintptr_t) mem
- + __alignof (pthread_mutex_t))
- & ~(__alignof (pthread_mutex_t) - 1));
- mut2 = mut1 + 1;
-
- cond = (pthread_cond_t *) (((uintptr_t) (mut2 + 1)
- + __alignof (pthread_cond_t))
- & ~(__alignof (pthread_cond_t) - 1));
-
- condition = (int *) (((uintptr_t) (cond + 1) + __alignof (int))
- & ~(__alignof (int) - 1));
-
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("mutexattr_init failed");
- exit (1);
- }
-
- if (pthread_mutexattr_setpshared (&ma, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("mutexattr_setpshared failed");
- exit (1);
- }
-
- if (pthread_mutex_init (mut1, &ma) != 0)
- {
- puts ("1st mutex_init failed");
- exit (1);
- }
-
- if (pthread_mutex_init (mut2, &ma) != 0)
- {
- puts ("2nd mutex_init failed");
- exit (1);
- }
-
- if (pthread_condattr_init (&ca) != 0)
- {
- puts ("condattr_init failed");
- exit (1);
- }
-
- if (pthread_condattr_setpshared (&ca, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("condattr_setpshared failed");
- exit (1);
- }
-
- if (pthread_cond_init (cond, &ca) != 0)
- {
- puts ("cond_init failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (mut1) != 0)
- {
- puts ("parent: 1st mutex_lock failed");
- exit (1);
- }
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
- else if (pid == 0)
- {
- struct timespec ts;
- struct timeval tv;
-
- if (pthread_mutex_lock (mut2) != 0)
- {
- puts ("child: mutex_lock failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (mut1) != 0)
- {
- puts ("child: 1st mutex_unlock failed");
- exit (1);
- }
-
- if (gettimeofday (&tv, NULL) != 0)
- {
- puts ("gettimeofday failed");
- exit (1);
- }
-
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_nsec += 500000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
-
- do
- if (pthread_cond_timedwait (cond, mut2, &ts) != 0)
- {
- puts ("child: cond_wait failed");
- exit (1);
- }
- while (*condition == 0);
-
- if (pthread_mutex_unlock (mut2) != 0)
- {
- puts ("child: 2nd mutex_unlock failed");
- exit (1);
- }
-
- puts ("child done");
- }
- else
- {
- int status;
-
- if (pthread_mutex_lock (mut1) != 0)
- {
- puts ("parent: 2nd mutex_lock failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (mut2) != 0)
- {
- puts ("parent: 3rd mutex_lock failed");
- exit (1);
- }
-
- if (pthread_cond_signal (cond) != 0)
- {
- puts ("parent: cond_signal failed");
- exit (1);
- }
-
- *condition = 1;
-
- if (pthread_mutex_unlock (mut2) != 0)
- {
- puts ("parent: mutex_unlock failed");
- exit (1);
- }
-
- puts ("waiting for child");
-
- waitpid (pid, &status, 0);
- result |= status;
-
- puts ("parent done");
- }
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond7.c b/test/nptl/tst-cond7.c
deleted file mode 100644
index c48fda13c..000000000
--- a/test/nptl/tst-cond7.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <sys/time.h>
-
-
-typedef struct
- {
- pthread_cond_t cond;
- pthread_mutex_t lock;
- pthread_t h;
- } T;
-
-
-static volatile bool done;
-
-
-static void *
-tf (void *arg)
-{
- puts ("child created");
-
- if (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) != 0
- || pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, NULL) != 0)
- {
- puts ("cannot set cancellation options");
- exit (1);
- }
-
- T *t = (T *) arg;
-
- if (pthread_mutex_lock (&t->lock) != 0)
- {
- puts ("child: lock failed");
- exit (1);
- }
-
- done = true;
-
- if (pthread_cond_signal (&t->cond) != 0)
- {
- puts ("child: cond_signal failed");
- exit (1);
- }
-
- if (pthread_cond_wait (&t->cond, &t->lock) != 0)
- {
- puts ("child: cond_wait failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&t->lock) != 0)
- {
- puts ("child: unlock failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- int i;
-#define N 100
- T *t[N];
- for (i = 0; i < N; ++i)
- {
- printf ("round %d\n", i);
-
- t[i] = (T *) malloc (sizeof (T));
- if (t[i] == NULL)
- {
- puts ("out of memory");
- exit (1);
- }
-
- if (pthread_mutex_init (&t[i]->lock, NULL) != 0
- || pthread_cond_init (&t[i]->cond, NULL) != 0)
- {
- puts ("an _init function failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&t[i]->lock) != 0)
- {
- puts ("initial mutex_lock failed");
- exit (1);
- }
-
- done = false;
-
- if (pthread_create (&t[i]->h, NULL, tf, t[i]) != 0)
- {
- puts ("pthread_create failed");
- exit (1);
- }
-
- do
- if (pthread_cond_wait (&t[i]->cond, &t[i]->lock) != 0)
- {
- puts ("cond_wait failed");
- exit (1);
- }
- while (! done);
-
- /* Release the lock since the cancel handler will get it. */
- if (pthread_mutex_unlock (&t[i]->lock) != 0)
- {
- puts ("mutex_unlock failed");
- exit (1);
- }
-
- if (pthread_cancel (t[i]->h) != 0)
- {
- puts ("cancel failed");
- exit (1);
- }
-
- puts ("parent: joining now");
-
- void *result;
- if (pthread_join (t[i]->h, &result) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (result != PTHREAD_CANCELED)
- {
- puts ("result != PTHREAD_CANCELED");
- exit (1);
- }
- }
-
- for (i = 0; i < N; ++i)
- free (t[i]);
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond8.c b/test/nptl/tst-cond8.c
deleted file mode 100644
index fb13fa46c..000000000
--- a/test/nptl/tst-cond8.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <sys/time.h>
-
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
-
-static pthread_barrier_t bar;
-
-
-static void
-ch (void *arg)
-{
- int e = pthread_mutex_lock (&mut);
- if (e == 0)
- {
- puts ("mutex not locked at all by cond_wait");
- exit (1);
- }
-
- if (e != EDEADLK)
- {
- puts ("no deadlock error signaled");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&mut) != 0)
- {
- puts ("ch: cannot unlock mutex");
- exit (1);
- }
-
- puts ("ch done");
-}
-
-
-static void *
-tf1 (void *p)
-{
- int err;
-
- if (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) != 0
- || pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, NULL) != 0)
- {
- puts ("cannot set cancellation options");
- exit (1);
- }
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- {
- puts ("child: cannot get mutex");
- exit (1);
- }
-
- err = pthread_barrier_wait (&bar);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("barrier_wait returned %d\n", err);
- exit (1);
- }
-
- puts ("child: got mutex; waiting");
-
- pthread_cleanup_push (ch, NULL);
-
- pthread_cond_wait (&cond, &mut);
-
- pthread_cleanup_pop (0);
-
- puts ("child: cond_wait should not have returned");
-
- return NULL;
-}
-
-
-static void *
-tf2 (void *p)
-{
- int err;
-
- if (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) != 0
- || pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, NULL) != 0)
- {
- puts ("cannot set cancellation options");
- exit (1);
- }
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- {
- puts ("child: cannot get mutex");
- exit (1);
- }
-
- err = pthread_barrier_wait (&bar);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- printf ("barrier_wait returned %d\n", err);
- exit (1);
- }
-
- puts ("child: got mutex; waiting");
-
- pthread_cleanup_push (ch, NULL);
-
- /* Current time. */
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- /* +1000 seconds in correct format. */
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += 1000;
-
- pthread_cond_timedwait (&cond, &mut, &ts);
-
- pthread_cleanup_pop (0);
-
- puts ("child: cond_wait should not have returned");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
- int err;
-
- printf ("&cond = %p\n&mut = %p\n", &cond, &mut);
-
- puts ("parent: get mutex");
-
- err = pthread_barrier_init (&bar, NULL, 2);
- if (err != 0)
- {
- puts ("parent: cannot init barrier");
- exit (1);
- }
-
- puts ("parent: create child");
-
- err = pthread_create (&th, NULL, tf1, NULL);
- if (err != 0)
- {
- puts ("parent: cannot create thread");
- exit (1);
- }
-
- puts ("parent: wait for child to lock mutex");
-
- err = pthread_barrier_wait (&bar);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent: cannot wait for barrier");
- exit (1);
- }
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- {
- puts ("parent: mutex_lock failed");
- exit (1);
- }
-
- err = pthread_mutex_unlock (&mut);
- if (err != 0)
- {
- puts ("parent: mutex_unlock failed");
- exit (1);
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cannot cancel thread");
- exit (1);
- }
-
- void *r;
- err = pthread_join (th, &r);
- if (err != 0)
- {
- puts ("parent: failed to join");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("child hasn't been canceled");
- exit (1);
- }
-
-
-
- puts ("parent: create 2nd child");
-
- err = pthread_create (&th, NULL, tf2, NULL);
- if (err != 0)
- {
- puts ("parent: cannot create thread");
- exit (1);
- }
-
- puts ("parent: wait for child to lock mutex");
-
- err = pthread_barrier_wait (&bar);
- if (err != 0 && err != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("parent: cannot wait for barrier");
- exit (1);
- }
-
- err = pthread_mutex_lock (&mut);
- if (err != 0)
- {
- puts ("parent: mutex_lock failed");
- exit (1);
- }
-
- err = pthread_mutex_unlock (&mut);
- if (err != 0)
- {
- puts ("parent: mutex_unlock failed");
- exit (1);
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cannot cancel thread");
- exit (1);
- }
-
- err = pthread_join (th, &r);
- if (err != 0)
- {
- puts ("parent: failed to join");
- exit (1);
- }
-
- if (r != PTHREAD_CANCELED)
- {
- puts ("child hasn't been canceled");
- exit (1);
- }
-
- puts ("done");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cond9.c b/test/nptl/tst-cond9.c
deleted file mode 100644
index dcb597ddf..000000000
--- a/test/nptl/tst-cond9.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <sys/time.h>
-
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
-
-
-static void *
-tf (void *arg)
-{
- int err = pthread_cond_wait (&cond, &mut);
- if (err == 0)
- {
- puts ("cond_wait did not fail");
- exit (1);
- }
-
- if (err != EPERM)
- {
- printf ("cond_wait didn't return EPERM but %d\n", err);
- exit (1);
- }
-
-
- /* Current time. */
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- /* +1000 seconds in correct format. */
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += 1000;
-
- err = pthread_cond_timedwait (&cond, &mut, &ts);
- if (err == 0)
- {
- puts ("cond_timedwait did not fail");
- exit (1);
- }
-
- if (err != EPERM)
- {
- printf ("cond_timedwait didn't return EPERM but %d\n", err);
- exit (1);
- }
-
- return (void *) 1l;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
- int err;
-
- printf ("&cond = %p\n&mut = %p\n", &cond, &mut);
-
- err = pthread_cond_wait (&cond, &mut);
- if (err == 0)
- {
- puts ("cond_wait did not fail");
- exit (1);
- }
-
- if (err != EPERM)
- {
- printf ("cond_wait didn't return EPERM but %d\n", err);
- exit (1);
- }
-
-
- /* Current time. */
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- /* +1000 seconds in correct format. */
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += 1000;
-
- err = pthread_cond_timedwait (&cond, &mut, &ts);
- if (err == 0)
- {
- puts ("cond_timedwait did not fail");
- exit (1);
- }
-
- if (err != EPERM)
- {
- printf ("cond_timedwait didn't return EPERM but %d\n", err);
- exit (1);
- }
-
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("parent: mutex_lock failed");
- exit (1);
- }
-
- puts ("creating thread");
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
- if (r != (void *) 1l)
- {
- puts ("thread has wrong return value");
- exit (1);
- }
-
- puts ("done");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cpuclock1.c b/test/nptl/tst-cpuclock1.c
deleted file mode 100644
index 9d68ec520..000000000
--- a/test/nptl/tst-cpuclock1.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* Test program for process CPU clocks.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-#include <signal.h>
-#include <sys/wait.h>
-
-/* This function is intended to rack up both user and system time. */
-static void
-chew_cpu (void)
-{
- while (1)
- {
- static volatile char buf[4096];
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xaa;
- int nullfd = open ("/dev/null", O_WRONLY);
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xbb;
- write (nullfd, (char *) buf, sizeof buf);
- close (nullfd);
- if (getppid () == 1)
- _exit (2);
- }
-}
-
-static int
-do_test (void)
-{
- int result = 0;
- clockid_t cl;
- int e;
- pid_t dead_child, child;
-
- /* Fork a child and let it die, to give us a PID known not be valid
- (assuming PIDs don't wrap around during the test). */
- {
- dead_child = fork ();
- if (dead_child == 0)
- _exit (0);
- if (dead_child < 0)
- {
- perror ("fork");
- return 1;
- }
- int x;
- if (wait (&x) != dead_child)
- {
- perror ("wait");
- return 2;
- }
- }
-
- /* POSIX says we should get ESRCH for this. */
- e = clock_getcpuclockid (dead_child, &cl);
- if (e != ENOSYS && e != ESRCH && e != EPERM)
- {
- printf ("clock_getcpuclockid on dead PID %d => %s\n",
- dead_child, strerror (e));
- result = 1;
- }
-
- /* Now give us a live child eating up CPU time. */
- child = fork ();
- if (child == 0)
- {
- chew_cpu ();
- _exit (1);
- }
- if (child < 0)
- {
- perror ("fork");
- return 1;
- }
-
- e = clock_getcpuclockid (child, &cl);
- if (e == EPERM)
- {
- puts ("clock_getcpuclockid does not support other processes");
- goto done;
- }
- if (e != 0)
- {
- printf ("clock_getcpuclockid on live PID %d => %s\n",
- child, strerror (e));
- result = 1;
- goto done;
- }
-
- const clockid_t child_clock = cl;
- struct timespec res;
- if (clock_getres (child_clock, &res) < 0)
- {
- printf ("clock_getres on live PID %d clock %lx => %s\n",
- child, (unsigned long int) child_clock, strerror (errno));
- result = 1;
- goto done;
- }
- printf ("live PID %d clock %lx resolution %lu.%.9lu\n",
- child, (unsigned long int) child_clock, res.tv_sec, res.tv_nsec);
-
- struct timespec before, after;
- if (clock_gettime (child_clock, &before) < 0)
- {
- printf ("clock_gettime on live PID %d clock %lx => %s\n",
- child, (unsigned long int) child_clock, strerror (errno));
- result = 1;
- goto done;
- }
- printf ("live PID %d before sleep => %lu.%.9lu\n",
- child, before.tv_sec, before.tv_nsec);
-
- struct timespec sleeptime = { .tv_nsec = 500000000 };
- nanosleep (&sleeptime, NULL);
-
- if (clock_gettime (child_clock, &after) < 0)
- {
- printf ("clock_gettime on live PID %d clock %lx => %s\n",
- child, (unsigned long int) child_clock, strerror (errno));
- result = 1;
- goto done;
- }
- printf ("live PID %d after sleep => %lu.%.9lu\n",
- child, after.tv_sec, after.tv_nsec);
-
- struct timespec diff = { .tv_sec = after.tv_sec - before.tv_sec,
- .tv_nsec = after.tv_nsec - before.tv_nsec };
- if (diff.tv_nsec < 0)
- {
- --diff.tv_sec;
- diff.tv_nsec += 1000000000;
- }
- if (diff.tv_sec != 0
- || diff.tv_nsec > 600000000
- || diff.tv_nsec < 100000000)
- {
- printf ("before - after %lu.%.9lu outside reasonable range\n",
- diff.tv_sec, diff.tv_nsec);
- result = 1;
- }
-
- sleeptime.tv_nsec = 100000000;
- e = clock_nanosleep (child_clock, 0, &sleeptime, NULL);
- if (e == EINVAL || e == ENOTSUP || e == ENOSYS)
- {
- printf ("clock_nanosleep not supported for other process clock: %s\n",
- strerror (e));
- }
- else if (e != 0)
- {
- printf ("clock_nanosleep on other process clock: %s\n", strerror (e));
- result = 1;
- }
- else
- {
- struct timespec afterns;
- if (clock_gettime (child_clock, &afterns) < 0)
- {
- printf ("clock_gettime on live PID %d clock %lx => %s\n",
- child, (unsigned long int) child_clock, strerror (errno));
- result = 1;
- }
- else
- {
- struct timespec d = { .tv_sec = afterns.tv_sec - after.tv_sec,
- .tv_nsec = afterns.tv_nsec - after.tv_nsec };
- if (d.tv_nsec < 0)
- {
- --d.tv_sec;
- d.tv_nsec += 1000000000;
- }
- if (d.tv_sec > 0
- || d.tv_nsec < sleeptime.tv_nsec
- || d.tv_nsec > sleeptime.tv_nsec * 2)
- {
- printf ("nanosleep time %lu.%.9lu outside reasonable range\n",
- d.tv_sec, d.tv_nsec);
- result = 1;
- }
- }
- }
-
- if (kill (child, SIGKILL) != 0)
- {
- perror ("kill");
- result = 2;
- goto done;
- }
-
- /* Wait long enough to let the child finish dying. */
-
- sleeptime.tv_nsec = 200000000;
- nanosleep (&sleeptime, NULL);
-
- struct timespec dead;
- if (clock_gettime (child_clock, &dead) < 0)
- {
- printf ("clock_gettime on dead PID %d clock %lx => %s\n",
- child, (unsigned long int) child_clock, strerror (errno));
- result = 1;
- goto done;
- }
- printf ("dead PID %d => %lu.%.9lu\n",
- child, dead.tv_sec, dead.tv_nsec);
-
- diff.tv_sec = dead.tv_sec - after.tv_sec;
- diff.tv_nsec = dead.tv_nsec - after.tv_nsec;
- if (diff.tv_nsec < 0)
- {
- --diff.tv_sec;
- diff.tv_nsec += 1000000000;
- }
- if (diff.tv_sec != 0 || diff.tv_nsec > 200000000)
- {
- printf ("dead - after %lu.%.9lu outside reasonable range\n",
- diff.tv_sec, diff.tv_nsec);
- result = 1;
- }
-
- /* Now reap the child and verify that its clock is no longer valid. */
- {
- int x;
- if (waitpid (child, &x, 0) != child)
- {
- perror ("waitpid");
- result = 1;
- }
- }
-
- if (clock_gettime (child_clock, &dead) == 0)
- {
- printf ("clock_gettime on reaped PID %d clock %lx => %lu%.9lu\n",
- child, (unsigned long int) child_clock,
- dead.tv_sec, dead.tv_nsec);
- result = 1;
- }
- else
- {
- if (errno != EINVAL)
- result = 1;
- printf ("clock_gettime on reaped PID %d clock %lx => %s\n",
- child, (unsigned long int) child_clock, strerror (errno));
- }
-
- if (clock_getres (child_clock, &dead) == 0)
- {
- printf ("clock_getres on reaped PID %d clock %lx => %lu%.9lu\n",
- child, (unsigned long int) child_clock,
- dead.tv_sec, dead.tv_nsec);
- result = 1;
- }
- else
- {
- if (errno != EINVAL)
- result = 1;
- printf ("clock_getres on reaped PID %d clock %lx => %s\n",
- child, (unsigned long int) child_clock, strerror (errno));
- }
-
- return result;
-
- done:
- {
- if (kill (child, SIGKILL) != 0 && errno != ESRCH)
- {
- perror ("kill");
- return 2;
- }
- int x;
- if (waitpid (child, &x, 0) != child && errno != ECHILD)
- {
- perror ("waitpid");
- return 2;
- }
- }
-
- return result;
-}
-
-
-#define TIMEOUT 5
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cpuclock2.c b/test/nptl/tst-cpuclock2.c
deleted file mode 100644
index d08dc6211..000000000
--- a/test/nptl/tst-cpuclock2.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* Test program for process and thread CPU clocks.
- Copyright (C) 2005 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <unistd.h>
-
-#if (_POSIX_THREADS - 0) <= 0
-
-# define TEST_FUNCTION 0
-
-#else
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-#include <pthread.h>
-
-static pthread_barrier_t barrier;
-
-/* This function is intended to rack up both user and system time. */
-static void *
-chew_cpu (void *arg)
-{
- pthread_barrier_wait (&barrier);
-
- while (1)
- {
- static volatile char buf[4096];
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xaa;
- int nullfd = open ("/dev/null", O_WRONLY);
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xbb;
- write (nullfd, (char *) buf, sizeof buf);
- close (nullfd);
- }
-
- return NULL;
-}
-
-static unsigned long long int
-tsdiff (const struct timespec *before, const struct timespec *after)
-{
- struct timespec diff = { .tv_sec = after->tv_sec - before->tv_sec,
- .tv_nsec = after->tv_nsec - before->tv_nsec };
- while (diff.tv_nsec < 0)
- {
- --diff.tv_sec;
- diff.tv_nsec += 1000000000;
- }
- return diff.tv_sec * 1000000000ULL + diff.tv_nsec;
-}
-
-static unsigned long long int
-test_nanosleep (clockid_t clock, const char *which,
- const struct timespec *before, int *bad)
-{
- const struct timespec sleeptime = { .tv_nsec = 100000000 };
- int e = clock_nanosleep (clock, 0, &sleeptime, NULL);
- if (e == EINVAL || e == ENOTSUP || e == ENOSYS)
- {
- printf ("clock_nanosleep not supported for %s CPU clock: %s\n",
- which, strerror (e));
- return 0;
- }
- if (e != 0)
- {
- printf ("clock_nanosleep on %s CPU clock: %s\n", which, strerror (e));
- *bad = 1;
- return 0;
- }
-
- struct timespec after;
- if (clock_gettime (clock, &after) < 0)
- {
- printf ("clock_gettime on %s CPU clock %lx => %s\n",
- which, (unsigned long int) clock, strerror (errno));
- *bad = 1;
- return 0;
- }
-
- unsigned long long int diff = tsdiff (before, &after);
- if (diff < sleeptime.tv_nsec || diff > sleeptime.tv_nsec * 2)
- {
- printf ("clock_nanosleep on %s slept %llu (outside reasonable range)\n",
- which, diff);
- *bad = 1;
- return diff;
- }
-
- struct timespec sleeptimeabs = sleeptime;
- sleeptimeabs.tv_sec += after.tv_sec;
- sleeptimeabs.tv_nsec += after.tv_nsec;
- while (sleeptimeabs.tv_nsec > 1000000000)
- {
- ++sleeptimeabs.tv_sec;
- sleeptimeabs.tv_nsec -= 1000000000;
- }
- e = clock_nanosleep (clock, TIMER_ABSTIME, &sleeptimeabs, NULL);
- if (e != 0)
- {
- printf ("absolute clock_nanosleep on %s CPU clock: %s\n",
- which, strerror (e));
- *bad = 1;
- return diff;
- }
-
- struct timespec afterabs;
- if (clock_gettime (clock, &afterabs) < 0)
- {
- printf ("clock_gettime on %s CPU clock %lx => %s\n",
- which, (unsigned long int) clock, strerror (errno));
- *bad = 1;
- return diff;
- }
-
- unsigned long long int sleepdiff = tsdiff (&sleeptimeabs, &afterabs);
- if (sleepdiff > sleeptime.tv_nsec)
- {
- printf ("\
-absolute clock_nanosleep on %s %llu past target (outside reasonable range)\n",
- which, sleepdiff);
- *bad = 1;
- }
-
- unsigned long long int diffabs = tsdiff (&after, &afterabs);
- if (diffabs < sleeptime.tv_nsec || diffabs > sleeptime.tv_nsec * 2)
- {
- printf ("\
-absolute clock_nanosleep on %s slept %llu (outside reasonable range)\n",
- which, diffabs);
- *bad = 1;
- }
-
- return diff + diffabs;
-}
-
-
-
-static int
-do_test (void)
-{
- int result = 0;
- clockid_t process_clock, th_clock, my_thread_clock;
- int e;
- pthread_t th;
-
- e = clock_getcpuclockid (0, &process_clock);
- if (e != 0)
- {
- printf ("clock_getcpuclockid on self => %s\n", strerror (e));
- return 1;
- }
-
- e = pthread_getcpuclockid (pthread_self (), &my_thread_clock);
- if (e != 0)
- {
- printf ("pthread_getcpuclockid on self => %s\n", strerror (e));
- return 1;
- }
-
- /* This is a kludge. This test fails if the semantics of thread and
- process clocks are wrong. The old code using hp-timing without kernel
- support has bogus semantics if there are context switches. We don't
- fail to report failure when the proper functionality is not available
- in the kernel. It so happens that Linux kernels without correct CPU
- clock support also lack CPU timer support, so we use use that to guess
- that we are using the bogus code and not test it. */
- timer_t t;
- if (timer_create (my_thread_clock, NULL, &t) != 0)
- {
- printf ("timer_create: %m\n");
- puts ("No support for CPU clocks with good semantics, skipping test");
- return 0;
- }
- timer_delete (t);
-
-
- pthread_barrier_init (&barrier, NULL, 2);
-
- e = pthread_create (&th, NULL, chew_cpu, NULL);
- if (e != 0)
- {
- printf ("pthread_create: %s\n", strerror (e));
- return 1;
- }
-
- e = pthread_getcpuclockid (th, &th_clock);
- if (e == ENOENT || e == ENOSYS || e == ENOTSUP)
- {
- puts ("pthread_getcpuclockid does not support other threads");
- return 1;
- }
-
- pthread_barrier_wait (&barrier);
-
- struct timespec res;
- if (clock_getres (th_clock, &res) < 0)
- {
- printf ("clock_getres on thread clock %lx => %s\n",
- (unsigned long int) th_clock, strerror (errno));
- result = 1;
- return 1;
- }
- printf ("live thread clock %lx resolution %lu.%.9lu\n",
- (unsigned long int) th_clock, res.tv_sec, res.tv_nsec);
-
- struct timespec process_before, process_after;
- if (clock_gettime (process_clock, &process_before) < 0)
- {
- printf ("clock_gettime on process clock %lx => %s\n",
- (unsigned long int) th_clock, strerror (errno));
- return 1;
- }
-
- struct timespec before, after;
- if (clock_gettime (th_clock, &before) < 0)
- {
- printf ("clock_gettime on live thread clock %lx => %s\n",
- (unsigned long int) th_clock, strerror (errno));
- return 1;
- }
- printf ("live thread before sleep => %lu.%.9lu\n",
- before.tv_sec, before.tv_nsec);
-
- struct timespec me_before, me_after;
- if (clock_gettime (my_thread_clock, &me_before) < 0)
- {
- printf ("clock_gettime on live thread clock %lx => %s\n",
- (unsigned long int) th_clock, strerror (errno));
- return 1;
- }
- printf ("self thread before sleep => %lu.%.9lu\n",
- me_before.tv_sec, me_before.tv_nsec);
-
- struct timespec sleeptime = { .tv_nsec = 500000000 };
- nanosleep (&sleeptime, NULL);
-
- if (clock_gettime (th_clock, &after) < 0)
- {
- printf ("clock_gettime on live thread clock %lx => %s\n",
- (unsigned long int) th_clock, strerror (errno));
- return 1;
- }
- printf ("live thread after sleep => %lu.%.9lu\n",
- after.tv_sec, after.tv_nsec);
-
- if (clock_gettime (process_clock, &process_after) < 0)
- {
- printf ("clock_gettime on process clock %lx => %s\n",
- (unsigned long int) th_clock, strerror (errno));
- return 1;
- }
-
- if (clock_gettime (my_thread_clock, &me_after) < 0)
- {
- printf ("clock_gettime on live thread clock %lx => %s\n",
- (unsigned long int) th_clock, strerror (errno));
- return 1;
- }
- printf ("self thread after sleep => %lu.%.9lu\n",
- me_after.tv_sec, me_after.tv_nsec);
-
- unsigned long long int th_diff = tsdiff (&before, &after);
- unsigned long long int pdiff = tsdiff (&process_before, &process_after);
- unsigned long long int my_diff = tsdiff (&me_before, &me_after);
-
- if (th_diff < 100000000 || th_diff > 600000000)
- {
- printf ("thread before - after %llu outside reasonable range\n",
- th_diff);
- result = 1;
- }
-
- if (my_diff > 100000000)
- {
- printf ("self thread before - after %llu outside reasonable range\n",
- my_diff);
- result = 1;
- }
-
- if (pdiff < th_diff)
- {
- printf ("process before - after %llu outside reasonable range (%llu)\n",
- pdiff, th_diff);
- result = 1;
- }
-
- process_after.tv_nsec += test_nanosleep (th_clock, "thread",
- &after, &result);
- process_after.tv_nsec += test_nanosleep (process_clock, "process",
- &process_after, &result);
- test_nanosleep (CLOCK_PROCESS_CPUTIME_ID,
- "PROCESS_CPUTIME_ID", &process_after, &result);
-
- pthread_cancel (th);
-
- e = clock_nanosleep (CLOCK_THREAD_CPUTIME_ID, 0, &sleeptime, NULL);
- if (e != EINVAL)
- {
- printf ("clock_nanosleep CLOCK_THREAD_CPUTIME_ID: %s\n",
- strerror (e));
- result = 1;
- }
-
- return result;
-}
-# define TIMEOUT 8
-# define TEST_FUNCTION do_test ()
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-cputimer1.c b/test/nptl/tst-cputimer1.c
deleted file mode 100644
index 8f5dd76cf..000000000
--- a/test/nptl/tst-cputimer1.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Tests for POSIX timer implementation using process CPU clock. */
-
-#include <unistd.h>
-
-#if _POSIX_THREADS && defined _POSIX_CPUTIME
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <time.h>
-#include <pthread.h>
-
-#define TEST_CLOCK CLOCK_PROCESS_CPUTIME_ID
-#define TEST_CLOCK_MISSING(clock) \
- (setup_test () ? "process CPU clock timer support" : NULL)
-
-/* This function is intended to rack up both user and system time. */
-static void *
-chew_cpu (void *arg)
-{
- while (1)
- {
- static volatile char buf[4096];
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xaa;
- int nullfd = open ("/dev/null", O_WRONLY);
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xbb;
- write (nullfd, (char *) buf, sizeof buf);
- close (nullfd);
- }
-
- return NULL;
-}
-
-static int
-setup_test (void)
-{
- /* Test timers on our own process CPU clock by having a worker thread
- eating CPU. First make sure we can make such timers at all. */
-
- timer_t t;
- if (timer_create (TEST_CLOCK, NULL, &t) != 0)
- {
- printf ("timer_create: %m\n");
- return 1;
- }
- timer_delete (t);
-
- pthread_t th;
- int e = pthread_create (&th, NULL, chew_cpu, NULL);
- if (e != 0)
- {
- printf ("pthread_create: %s\n", strerror (e));
- exit (1);
- }
-
- return 0;
-}
-
-#else
-# define TEST_CLOCK_MISSING(clock) "process clocks"
-#endif
-
-#include "tst-timer4.c"
diff --git a/test/nptl/tst-cputimer2.c b/test/nptl/tst-cputimer2.c
deleted file mode 100644
index 397d7998c..000000000
--- a/test/nptl/tst-cputimer2.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Tests for POSIX timer implementation using thread CPU clock. */
-
-#include <unistd.h>
-
-#if _POSIX_THREADS && defined _POSIX_CPUTIME
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <time.h>
-#include <pthread.h>
-
-static clockid_t worker_thread_clock;
-
-#define TEST_CLOCK worker_thread_clock
-#define TEST_CLOCK_MISSING(clock) \
- (setup_test () ? "thread CPU clock timer support" : NULL)
-
-/* This function is intended to rack up both user and system time. */
-static void *
-chew_cpu (void *arg)
-{
- while (1)
- {
- static volatile char buf[4096];
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xaa;
- int nullfd = open ("/dev/null", O_WRONLY);
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xbb;
- write (nullfd, (char *) buf, sizeof buf);
- close (nullfd);
- }
-
- return NULL;
-}
-
-static int
-setup_test (void)
-{
- /* Test timers on a thread CPU clock by having a worker thread eating
- CPU. First make sure we can make such timers at all. */
-
- pthread_t th;
- int e = pthread_create (&th, NULL, chew_cpu, NULL);
- if (e != 0)
- {
- printf ("pthread_create: %s\n", strerror (e));
- exit (1);
- }
-
- e = pthread_getcpuclockid (th, &worker_thread_clock);
- if (e == EPERM || e == ENOENT || e == ENOTSUP)
- {
- puts ("pthread_getcpuclockid does not support other threads");
- return 1;
- }
- if (e != 0)
- {
- printf ("pthread_getcpuclockid: %s\n", strerror (e));
- exit (1);
- }
-
- timer_t t;
- if (timer_create (TEST_CLOCK, NULL, &t) != 0)
- {
- printf ("timer_create: %m\n");
- return 1;
- }
- timer_delete (t);
-
- return 0;
-}
-
-#else
-# define TEST_CLOCK_MISSING(clock) "process clocks"
-#endif
-
-#include "tst-timer4.c"
diff --git a/test/nptl/tst-cputimer3.c b/test/nptl/tst-cputimer3.c
deleted file mode 100644
index 056766a37..000000000
--- a/test/nptl/tst-cputimer3.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Tests for POSIX timer implementation using another process's CPU clock. */
-
-#include <unistd.h>
-
-#if _POSIX_THREADS && defined _POSIX_CPUTIME
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <time.h>
-#include <signal.h>
-#include <sys/wait.h>
-
-static clockid_t child_clock;
-
-#define TEST_CLOCK child_clock
-#define TEST_CLOCK_MISSING(clock) \
- (setup_test () ? "other-process CPU clock timer support" : NULL)
-
-/* This function is intended to rack up both user and system time. */
-static void
-chew_cpu (void)
-{
- while (1)
- {
- static volatile char buf[4096];
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xaa;
- int nullfd = open ("/dev/null", O_WRONLY);
- for (int i = 0; i < 100; ++i)
- for (size_t j = 0; j < sizeof buf; ++j)
- buf[j] = 0xbb;
- write (nullfd, (char *) buf, sizeof buf);
- close (nullfd);
- if (getppid () == 1)
- _exit (2);
- }
-}
-
-static pid_t child;
-static void
-cleanup_child (void)
-{
- if (child <= 0)
- return;
- if (kill (child, SIGKILL) < 0 && errno != ESRCH)
- printf ("cannot kill child %d: %m\n", child);
- else
- {
- int status;
- errno = 0;
- if (waitpid (child, &status, 0) != child)
- printf ("waitpid %d: %m\n", child);
- }
-}
-#define CLEANUP_HANDLER cleanup_child ()
-
-static int
-setup_test (void)
-{
- /* Test timers on a process CPU clock by having a child process eating
- CPU. First make sure we can make such timers at all. */
-
- int pipefd[2];
- if (pipe (pipefd) < 0)
- {
- printf ("pipe: %m\n");
- exit (1);
- }
-
- child = fork ();
-
- if (child == 0)
- {
- char c;
- close (pipefd[1]);
- if (read (pipefd[0], &c, 1) == 1)
- chew_cpu ();
- _exit (1);
- }
-
- if (child < 0)
- {
- printf ("fork: %m\n");
- exit (1);
- }
-
- atexit (&cleanup_child);
-
- close (pipefd[0]);
-
- int e = clock_getcpuclockid (child, &child_clock);
- if (e == EPERM)
- {
- puts ("clock_getcpuclockid does not support other processes");
- return 1;
- }
- if (e != 0)
- {
- printf ("clock_getcpuclockid: %s\n", strerror (e));
- exit (1);
- }
-
- timer_t t;
- if (timer_create (TEST_CLOCK, NULL, &t) != 0)
- {
- printf ("timer_create: %m\n");
- return 1;
- }
- timer_delete (t);
-
- /* Get the child started chewing. */
- if (write (pipefd[1], "x", 1) != 1)
- {
- printf ("write to pipe: %m\n");
- return 1;
- }
- close (pipefd[1]);
-
- return 0;
-}
-
-#else
-# define TEST_CLOCK_MISSING(clock) "process clocks"
-#endif
-
-#include "tst-timer4.c"
diff --git a/test/nptl/tst-detach1.c b/test/nptl/tst-detach1.c
deleted file mode 100644
index 90a69fffd..000000000
--- a/test/nptl/tst-detach1.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void *
-tf (void *arg)
-{
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
- if (pthread_create (&th, NULL, tf, (void *) pthread_self ()) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- /* Give the child a chance to finish. */
- sleep (1);
-
- if (pthread_detach (th) != 0)
- {
- puts ("detach failed");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-dlsym1.c b/test/nptl/tst-dlsym1.c
deleted file mode 100644
index 3744570c7..000000000
--- a/test/nptl/tst-dlsym1.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Test case by Hui Huang <hui.huang@sun.com>. */
-#include <dlfcn.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static void *
-start_routine (void *args)
-{
- int i;
- void **addrs = (void **) args;
- for (i = 0; i < 10000; ++i)
- addrs[i % 1024] = dlsym (NULL, "does_not_exist");
-
- return addrs;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t tid1, tid2, tid3;
-
- void *addrs1[1024];
- void *addrs2[1024];
- void *addrs3[1024];
-
- if (pthread_create (&tid1, NULL, start_routine, addrs1) != 0)
- {
- puts ("1st create failed");
- exit (1);
- }
- if (pthread_create (&tid2, NULL, start_routine, addrs2) != 0)
- {
- puts ("2nd create failed");
- exit (1);
- }
- if (pthread_create (&tid3, NULL, start_routine, addrs3) != 0)
- {
- puts ("3rd create failed");
- exit (1);
- }
-
- if (pthread_join (tid1, NULL) != 0)
- {
- puts ("1st join failed");
- exit (1);
- }
- if (pthread_join (tid2, NULL) != 0)
- {
- puts ("2nd join failed");
- exit (1);
- }
- if (pthread_join (tid3, NULL) != 0)
- {
- puts ("2rd join failed");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-eintr1.c b/test/nptl/tst-eintr1.c
deleted file mode 100644
index ac381a88b..000000000
--- a/test/nptl/tst-eintr1.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "eintr.c"
-
-
-static void *
-tf2 (void *arg)
-{
- return arg;
-}
-
-
-static void *
-tf1 (void *arg)
-{
- while (1)
- {
- pthread_t th;
-
- int e = pthread_create (&th, NULL, tf2, NULL);
- if (e != 0)
- {
- if (e == EINTR)
- {
- puts ("pthread_create returned EINTR");
- exit (1);
- }
-
- char buf[100];
- printf ("tf1: pthread_create failed: %s\n",
- strerror_r (e, buf, sizeof (buf)));
- exit (1);
- }
-
- e = pthread_join (th, NULL);
- if (e != 0)
- {
- if (e == EINTR)
- {
- puts ("pthread_join returned EINTR");
- exit (1);
- }
-
- char buf[100];
- printf ("tf1: pthread_join failed: %s\n",
- strerror_r (e, buf, sizeof (buf)));
- exit (1);
- }
- }
-}
-
-
-static int
-do_test (void)
-{
- setup_eintr (SIGUSR1, NULL);
-
- int i;
- for (i = 0; i < 10; ++i)
- {
- pthread_t th;
- int e = pthread_create (&th, NULL, tf1, NULL);
- if (e != 0)
- {
- char buf[100];
- printf ("main: pthread_create failed: %s\n",
- strerror_r (e, buf, sizeof (buf)));
- exit (1);
- }
- }
-
- (void) tf1 (NULL);
- /* NOTREACHED */
-
- return 0;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TIMEOUT 3
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-eintr2.c b/test/nptl/tst-eintr2.c
deleted file mode 100644
index f20c70922..000000000
--- a/test/nptl/tst-eintr2.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-
-#include "eintr.c"
-
-
-static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
-
-
-static void *
-tf1 (void *arg)
-{
- struct timespec ts;
- struct timeval tv;
-
- gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += 10000;
-
- /* This call must never return. */
- int e = pthread_mutex_timedlock (&m1, &ts);
- char buf[100];
- printf ("tf1: mutex_timedlock returned: %s\n",
- strerror_r (e, buf, sizeof (buf)));
-
- exit (1);
-}
-
-
-static void *
-tf2 (void *arg)
-{
- while (1)
- {
- int e = pthread_mutex_lock (&m2);
- if (e != 0)
- {
- puts ("tf2: mutex_lock failed");
- exit (1);
- }
- e = pthread_mutex_unlock (&m2);
- if (e != 0)
- {
- puts ("tf2: mutex_unlock failed");
- exit (1);
- }
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 };
- nanosleep (&ts, NULL);
- }
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_mutex_lock (&m1) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- setup_eintr (SIGUSR1, NULL);
-
- pthread_t th;
- char buf[100];
- int e = pthread_create (&th, NULL, tf1, NULL);
- if (e != 0)
- {
- printf ("main: 1st pthread_create failed: %s\n",
- strerror_r (e, buf, sizeof (buf)));
- exit (1);
- }
-
- e = pthread_create (&th, NULL, tf2, NULL);
- if (e != 0)
- {
- printf ("main: 2nd pthread_create failed: %s\n",
- strerror_r (e, buf, sizeof (buf)));
- exit (1);
- }
-
- /* This call must never return. */
- e = pthread_mutex_lock (&m1);
- printf ("main: mutex_lock returned: %s\n",
- strerror_r (e, buf, sizeof (buf)));
-
- return 0;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TIMEOUT 3
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-eintr3.c b/test/nptl/tst-eintr3.c
deleted file mode 100644
index 31497603b..000000000
--- a/test/nptl/tst-eintr3.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "eintr.c"
-
-
-static void *
-tf (void *arg)
-{
- pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_lock (&m);
- /* This call must not return. */
- pthread_mutex_lock (&m);
-
- puts ("tf: mutex_lock returned");
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- pthread_t self = pthread_self ();
-
- setup_eintr (SIGUSR1, &self);
-
- pthread_t th;
- char buf[100];
- int e = pthread_create (&th, NULL, tf, NULL);
- if (e != 0)
- {
- printf ("main: pthread_create failed: %s\n",
- strerror_r (e, buf, sizeof (buf)));
- exit (1);
- }
-
- /* This call must never return. */
- e = pthread_join (th, NULL);
-
- if (e == EINTR)
- puts ("pthread_join returned with EINTR");
-
- return 0;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TIMEOUT 1
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-eintr4.c b/test/nptl/tst-eintr4.c
deleted file mode 100644
index f2290f9d0..000000000
--- a/test/nptl/tst-eintr4.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "eintr.c"
-
-
-static int
-do_test (void)
-{
- pthread_t self = pthread_self ();
-
- setup_eintr (SIGUSR1, &self);
-
- pthread_barrier_t b;
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- /* This call must never return. */
- int e = pthread_barrier_wait (&b);
-
- if (e == EINTR)
- puts ("pthread_join returned with EINTR");
-
- return 0;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TIMEOUT 1
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-eintr5.c b/test/nptl/tst-eintr5.c
deleted file mode 100644
index f7cb76274..000000000
--- a/test/nptl/tst-eintr5.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-
-#include "eintr.c"
-
-
-static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
-
-
-static void *
-tf (void *arg)
-{
- struct timespec ts;
- struct timeval tv;
-
- gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += 10000;
-
- /* This call must never return. */
- int e = pthread_cond_timedwait (&c, &m, &ts);
- char buf[100];
- printf ("tf: cond_timedwait returned: %s\n",
- strerror_r (e, buf, sizeof (buf)));
-
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- setup_eintr (SIGUSR1, NULL);
-
- pthread_t th;
- char buf[100];
- int e = pthread_create (&th, NULL, tf, NULL);
- if (e != 0)
- {
- printf ("main: pthread_create failed: %s\n",
- strerror_r (e, buf, sizeof (buf)));
- exit (1);
- }
-
- /* This call must never return. */
- e = pthread_cond_wait (&c, &m);
- printf ("main: cond_wait returned: %s\n",
- strerror_r (e, buf, sizeof (buf)));
-
- return 0;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TIMEOUT 3
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-exec2.c b/test/nptl/tst-exec2.c
deleted file mode 100644
index 061e3fc7c..000000000
--- a/test/nptl/tst-exec2.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Thread with running thread calls exec.
- Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <paths.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static void *
-tf (void *arg)
-{
- pthread_t th = (pthread_t) arg;
-
- if (pthread_join (th, NULL) == 0)
- {
- puts ("thread in parent joined!?");
- exit (1);
- }
-
- puts ("join in thread in parent returned!?");
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- int fd[2];
- if (pipe (fd) != 0)
- {
- puts ("pipe failed");
- exit (1);
- }
-
- /* Not interested in knowing when the pipe is closed. */
- if (sigignore (SIGPIPE) != 0)
- {
- puts ("sigignore failed");
- exit (1);
- }
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- /* Use the fd for stdout. This is kind of ugly because it
- substitutes the fd of stdout but we know what we are doing
- here... */
- if (dup2 (fd[1], STDOUT_FILENO) != STDOUT_FILENO)
- {
- puts ("dup2 failed");
- exit (1);
- }
-
- close (fd[0]);
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, (void *) pthread_self ()) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- execl (_PATH_BSHELL, _PATH_BSHELL, "-c", "echo $$", NULL);
-
- puts ("execl failed");
- exit (1);
- }
-
- close (fd[1]);
-
- char buf[200];
- ssize_t n;
- bool seen_pid = false;
- while (TEMP_FAILURE_RETRY ((n = read (fd[0], buf, sizeof (buf)))) > 0)
- {
- /* We only expect to read the PID. */
- char *endp;
- long int rpid = strtol (buf, &endp, 10);
-
- if (*endp != '\n')
- {
- printf ("didn't parse whole line: \"%s\"\n", buf);
- exit (1);
- }
- if (endp == buf)
- {
- puts ("read empty line");
- exit (1);
- }
-
- if (rpid != pid)
- {
- printf ("found \"%s\", expected PID %ld\n", buf, (long int) pid);
- exit (1);
- }
-
- if (seen_pid)
- {
- puts ("found more than one PID line");
- exit (1);
- }
- seen_pid = true;
- }
-
- close (fd[0]);
-
- int status;
- int err = waitpid (pid, &status, 0);
- if (err != pid)
- {
- puts ("waitpid failed");
- exit (1);
- }
-
- if (!seen_pid)
- {
- puts ("didn't get PID");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-exec3.c b/test/nptl/tst-exec3.c
deleted file mode 100644
index be4098b32..000000000
--- a/test/nptl/tst-exec3.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Thread calls exec.
- Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <paths.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static void *
-tf (void *arg)
-{
- execl (_PATH_BSHELL, _PATH_BSHELL, "-c", "echo $$", NULL);
-
- puts ("execl failed");
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- int fd[2];
- if (pipe (fd) != 0)
- {
- puts ("pipe failed");
- exit (1);
- }
-
- /* Not interested in knowing when the pipe is closed. */
- if (sigignore (SIGPIPE) != 0)
- {
- puts ("sigignore failed");
- exit (1);
- }
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- {
- /* Use the fd for stdout. This is kind of ugly because it
- substitutes the fd of stdout but we know what we are doing
- here... */
- if (dup2 (fd[1], STDOUT_FILENO) != STDOUT_FILENO)
- {
- puts ("dup2 failed");
- exit (1);
- }
-
- close (fd[0]);
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- if (pthread_join (th, NULL) == 0)
- {
- puts ("join succeeded!?");
- exit (1);
- }
-
- puts ("join returned!?");
- exit (1);
- }
-
- close (fd[1]);
-
- char buf[200];
- ssize_t n;
- bool seen_pid = false;
- while (TEMP_FAILURE_RETRY ((n = read (fd[0], buf, sizeof (buf)))) > 0)
- {
- /* We only expect to read the PID. */
- char *endp;
- long int rpid = strtol (buf, &endp, 10);
-
- if (*endp != '\n')
- {
- printf ("didn't parse whole line: \"%s\"\n", buf);
- exit (1);
- }
- if (endp == buf)
- {
- puts ("read empty line");
- exit (1);
- }
-
- if (rpid != pid)
- {
- printf ("found \"%s\", expected PID %ld\n", buf, (long int) pid);
- exit (1);
- }
-
- if (seen_pid)
- {
- puts ("found more than one PID line");
- exit (1);
- }
- seen_pid = true;
- }
-
- close (fd[0]);
-
- int status;
- int err = waitpid (pid, &status, 0);
- if (err != pid)
- {
- puts ("waitpid failed");
- exit (1);
- }
-
- if (!seen_pid)
- {
- puts ("didn't get PID");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-exec4.c b/test/nptl/tst-exec4.c
deleted file mode 100644
index 1a4b88c69..000000000
--- a/test/nptl/tst-exec4.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Signal handler and mask set in thread which calls exec.
- Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void *
-tf (void *arg)
-{
- /* Ignore SIGUSR1 and block SIGUSR2. */
- if (sigignore (SIGUSR1) != 0)
- {
- puts ("sigignore failed");
- exit (1);
- }
-
- sigset_t ss;
- sigemptyset (&ss);
- sigaddset (&ss, SIGUSR2);
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("1st run: sigmask failed");
- exit (1);
- }
-
- char **oldargv = (char **) arg;
- size_t n = 1;
- while (oldargv[n] != NULL)
- ++n;
-
- char **argv = (char **) alloca ((n + 1) * sizeof (char *));
- for (n = 0; oldargv[n + 1] != NULL; ++n)
- argv[n] = oldargv[n + 1];
- argv[n++] = (char *) "-d";
- argv[n] = NULL;
-
- execv (argv[0], argv);
-
- puts ("execv failed");
-
- exit (1);
-}
-
-
-static int
-do_test (int argc, char *argv[])
-{
- if (argc == 1)
- {
- /* This is the second call. Perform the test. */
- struct sigaction sa;
-
- if (sigaction (SIGUSR1, NULL, &sa) != 0)
- {
- puts ("2nd run: sigaction failed");
- return 1;
- }
- if (sa.sa_handler != SIG_IGN)
- {
- puts ("SIGUSR1 not ignored");
- return 1;
- }
-
- sigset_t ss;
- if (pthread_sigmask (SIG_SETMASK, NULL, &ss) != 0)
- {
- puts ("2nd run: sigmask failed");
- return 1;
- }
- if (! sigismember (&ss, SIGUSR2))
- {
- puts ("SIGUSR2 not blocked");
- return 1;
- }
-
- return 0;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, argv) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- /* This call should never return. */
- pthread_join (th, NULL);
-
- puts ("join returned");
-
- return 1;
-}
-
-#define TEST_FUNCTION do_test (argc, argv)
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-exit1.c b/test/nptl/tst-exit1.c
deleted file mode 100644
index 7f0fe7954..000000000
--- a/test/nptl/tst-exit1.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* NOTE: this tests functionality beyond POSIX. POSIX does not allow
- exit to be called more than once. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static pthread_barrier_t b;
-
-
-static void *
-tf (void *arg)
-{
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- exit (0);
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- /* Do nothing. */
- if (pthread_join (th, NULL) == 0)
- {
- puts ("join succeeded!?");
- exit (1);
- }
-
- puts ("join returned!?");
- exit (1);
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-exit2.c b/test/nptl/tst-exit2.c
deleted file mode 100644
index 3f5ff27b0..000000000
--- a/test/nptl/tst-exit2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static void *
-tf (void *arg)
-{
- while (1)
- sleep (100);
-
- /* NOTREACHED */
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- int e = pthread_create (&th, NULL, tf, NULL);
- if (e != 0)
- {
- printf ("create failed: %s\n", strerror (e));
- return 1;
- }
-
- /* Terminate only this thread. */
- pthread_exit (NULL);
-
- /* NOTREACHED */
- return 1;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-exit3.c b/test/nptl/tst-exit3.c
deleted file mode 100644
index da92c82c0..000000000
--- a/test/nptl/tst-exit3.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-
-static pthread_barrier_t b;
-
-
-static void *
-tf2 (void *arg)
-{
- while (1)
- sleep (100);
-
- /* NOTREACHED */
- return NULL;
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_t th;
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- e = pthread_create (&th, NULL, tf2, NULL);
- if (e != 0)
- {
- printf ("create failed: %s\n", strerror (e));
- exit (1);
- }
-
- /* Terminate only this thread. */
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- int e = pthread_create (&th, NULL, tf, NULL);
- if (e != 0)
- {
- printf ("create failed: %s\n", strerror (e));
- exit (1);
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- /* Terminate only this thread. */
- pthread_exit (NULL);
-
- /* NOTREACHED */
- return 1;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-fini1.c b/test/nptl/tst-fini1.c
deleted file mode 100644
index b8c7a7306..000000000
--- a/test/nptl/tst-fini1.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <unistd.h>
-
-extern void m (void);
-
-int
-main (void)
-{
- alarm (5);
-
- m ();
-
- /* The destructor is supposed to run now. Make sure that if it is
- not we will notice it by using 42 as the exit code. In case the
- destructor is run it will terminate with status zero. */
- return 42;
-}
diff --git a/test/nptl/tst-fini1mod.c b/test/nptl/tst-fini1mod.c
deleted file mode 100644
index 669c9af4c..000000000
--- a/test/nptl/tst-fini1mod.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void *
-tf (void *arg)
-{
- int fds[2];
- if (pipe (fds) != 0)
- {
- puts ("pipe failed");
- exit (1);
- }
-
- char buf[10];
- read (fds[0], buf, sizeof (buf));
-
- puts ("read returned");
- exit (1);
-}
-
-static pthread_t th;
-
-static void
-__attribute ((destructor))
-dest (void)
-{
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- _exit (1);
- }
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- _exit (1);
- }
- /* Exit successfully. */
- _exit (0);
-}
-
-void
-m (void)
-{
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- _exit (1);
- }
-}
diff --git a/test/nptl/tst-flock1.c b/test/nptl/tst-flock1.c
deleted file mode 100644
index e271c8023..000000000
--- a/test/nptl/tst-flock1.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/file.h>
-
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-
-static int fd;
-
-
-static void *
-tf (void *arg)
-{
- if (flock (fd, LOCK_SH | LOCK_NB) != 0)
- {
- puts ("second flock failed");
- exit (1);
- }
-
- pthread_mutex_unlock (&lock);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- char tmp[] = "/tmp/tst-flock1-XXXXXX";
-
- fd = mkstemp (tmp);
- if (fd == -1)
- {
- puts ("mkstemp failed");
- exit (1);
- }
-
- unlink (tmp);
-
- write (fd, "foobar xyzzy", 12);
-
- if (flock (fd, LOCK_EX | LOCK_NB) != 0)
- {
- puts ("first flock failed");
- exit (1);
- }
-
- pthread_mutex_lock (&lock);
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- exit (1);
- }
-
- pthread_mutex_lock (&lock);
-
- void *result;
- if (pthread_join (th, &result) != 0)
- {
- puts ("pthread_join failed");
- exit (1);
- }
-
- close (fd);
-
- return result != NULL;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-flock2.c b/test/nptl/tst-flock2.c
deleted file mode 100644
index 941c52ffe..000000000
--- a/test/nptl/tst-flock2.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/file.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t lock2 = PTHREAD_MUTEX_INITIALIZER;
-static int fd;
-
-
-static void *
-tf (void *arg)
-{
- struct flock fl =
- {
- .l_type = F_WRLCK,
- .l_start = 0,
- .l_whence = SEEK_SET,
- .l_len = 10
- };
- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLKW, &fl)) != 0)
- {
- puts ("fourth fcntl failed");
- exit (1);
- }
-
- pthread_mutex_unlock (&lock);
-
- pthread_mutex_lock (&lock2);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- char tmp[] = "/tmp/tst-flock2-XXXXXX";
-
- fd = mkstemp (tmp);
- if (fd == -1)
- {
- puts ("mkstemp failed");
- return 1;
- }
-
- unlink (tmp);
-
- int i;
- for (i = 0; i < 20; ++i)
- write (fd, "foobar xyzzy", 12);
-
- pthread_barrier_t *b;
- b = mmap (NULL, sizeof (pthread_barrier_t), PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (b == MAP_FAILED)
- {
- puts ("mmap failed");
- return 1;
- }
-
- pthread_barrierattr_t ba;
- if (pthread_barrierattr_init (&ba) != 0)
- {
- puts ("barrierattr_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_setpshared (&ba, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("barrierattr_setpshared failed");
- return 1;
- }
-
- if (pthread_barrier_init (b, &ba, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_destroy (&ba) != 0)
- {
- puts ("barrierattr_destroy failed");
- return 1;
- }
-
- struct flock fl =
- {
- .l_type = F_WRLCK,
- .l_start = 0,
- .l_whence = SEEK_SET,
- .l_len = 10
- };
- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLKW, &fl)) != 0)
- {
- puts ("first fcntl failed");
- return 1;
- }
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
-
- if (pid == 0)
- {
- /* Make sure the child does not stay around indefinitely. */
- alarm (10);
-
- /* Try to get the lock. */
- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLK, &fl)) == 0)
- {
- puts ("child: second flock succeeded");
- return 1;
- }
- }
-
- pthread_barrier_wait (b);
-
- if (pid != 0)
- {
- fl.l_type = F_UNLCK;
- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLKW, &fl)) != 0)
- {
- puts ("third fcntl failed");
- return 1;
- }
- }
-
- pthread_barrier_wait (b);
-
- pthread_t th;
- if (pid == 0)
- {
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("1st locking of lock failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&lock2) != 0)
- {
- puts ("1st locking of lock2 failed");
- return 1;
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("2nd locking of lock failed");
- return 1;
- }
-
- puts ("child locked file");
- }
-
- pthread_barrier_wait (b);
-
- if (pid != 0)
- {
- fl.l_type = F_WRLCK;
- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLK, &fl)) == 0)
- {
- puts ("fifth fcntl succeeded");
- return 1;
- }
-
- puts ("file locked by child");
- }
-
- pthread_barrier_wait (b);
-
- if (pid == 0)
- {
- if (pthread_mutex_unlock (&lock2) != 0)
- {
- puts ("unlock of lock2 failed");
- return 1;
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- puts ("child's thread terminated");
- }
-
- pthread_barrier_wait (b);
-
- if (pid != 0)
- {
- fl.l_type = F_WRLCK;
- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLK, &fl)) == 0)
- {
- puts ("fifth fcntl succeeded");
- return 1;
- }
-
- puts ("file still locked");
- }
-
- pthread_barrier_wait (b);
-
- if (pid == 0)
- {
- _exit (0);
- }
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("waitpid failed");
- return 1;
- }
- puts ("child terminated");
-
- if (TEMP_FAILURE_RETRY (fcntl (fd, F_SETLKW, &fl)) != 0)
- {
- puts ("sixth fcntl failed");
- return 1;
- }
-
- return status;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-fork1.c b/test/nptl/tst-fork1.c
deleted file mode 100644
index 0d8972831..000000000
--- a/test/nptl/tst-fork1.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright (C) 2002, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Roland McGrath <roland@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-static void *
-thread_function (void * arg)
-{
- int i = (intptr_t) arg;
- int status;
- pid_t pid;
- pid_t pid2;
-
- pid = fork ();
- switch (pid)
- {
- case 0:
- printf ("%ld for %d\n", (long int) getpid (), i);
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 * i };
- nanosleep (&ts, NULL);
- _exit (i);
- break;
- case -1:
- printf ("fork: %m\n");
- return (void *) 1l;
- break;
- }
-
- pid2 = TEMP_FAILURE_RETRY (waitpid (pid, &status, 0));
- if (pid2 != pid)
- {
- printf ("waitpid returned %ld, expected %ld\n",
- (long int) pid2, (long int) pid);
- return (void *) 1l;
- }
-
- printf ("%ld with %d, expected %d\n",
- (long int) pid, WEXITSTATUS (status), i);
-
- return WEXITSTATUS (status) == i ? NULL : (void *) 1l;
-}
-
-#define N 5
-static const int t[N] = { 7, 6, 5, 4, 3 };
-
-int
-main (void)
-{
- pthread_t th[N];
- int i;
- int result = 0;
- pthread_attr_t at;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- for (i = 0; i < N; ++i)
- if (pthread_create (&th[i], NULL, thread_function,
- (void *) (intptr_t) t[i]) != 0)
- {
- printf ("creation of thread %d failed\n", i);
- exit (1);
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- for (i = 0; i < N; ++i)
- {
- void *v;
- if (pthread_join (th[i], &v) != 0)
- {
- printf ("join of thread %d failed\n", i);
- result = 1;
- }
- else if (v != NULL)
- {
- printf ("join %d successful, but child failed\n", i);
- result = 1;
- }
- else
- printf ("join %d successful\n", i);
- }
-
- return result;
-}
diff --git a/test/nptl/tst-fork2.c b/test/nptl/tst-fork2.c
deleted file mode 100644
index d85ea21e1..000000000
--- a/test/nptl/tst-fork2.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Roland McGrath <roland@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static pid_t initial_pid;
-
-
-static void *
-tf (void *arg)
-{
- if (getppid () != initial_pid)
- {
- printf ("getppid in thread returned %ld, expected %ld\n",
- (long int) getppid (), (long int) initial_pid);
- return (void *) -1;
- }
-
- return NULL;
-}
-
-
-int
-main (void)
-{
- initial_pid = getpid ();
-
- pid_t child = fork ();
- if (child == 0)
- {
- if (getppid () != initial_pid)
- {
- printf ("first getppid returned %ld, expected %ld\n",
- (long int) getppid (), (long int) initial_pid);
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- exit (1);
- }
-
- void *result;
- if (pthread_join (th, &result) != 0)
- {
- puts ("pthread_join failed");
- exit (1);
- }
-
- exit (result == NULL ? 0 : 1);
- }
- else if (child == -1)
- {
- puts ("initial fork failed");
- return 1;
- }
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (child, &status, 0)) != child)
- {
- printf ("waitpid failed: %m\n");
- return 1;
- }
-
- return status;
-}
diff --git a/test/nptl/tst-fork3.c b/test/nptl/tst-fork3.c
deleted file mode 100644
index 968d0ab98..000000000
--- a/test/nptl/tst-fork3.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Roland McGrath <roland@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static pid_t initial_pid;
-
-
-static void *
-tf2 (void *arg)
-{
- if (getppid () != initial_pid)
- {
- printf ("getppid in thread returned %ld, expected %ld\n",
- (long int) getppid (), (long int) initial_pid);
- return (void *) -1;
- }
-
- return NULL;
-}
-
-
-static void *
-tf1 (void *arg)
-{
- pid_t child = fork ();
- if (child == 0)
- {
- if (getppid () != initial_pid)
- {
- printf ("first getppid returned %ld, expected %ld\n",
- (long int) getppid (), (long int) initial_pid);
- exit (1);
- }
-
- pthread_t th2;
- if (pthread_create (&th2, NULL, tf2, NULL) != 0)
- {
- puts ("child: pthread_create failed");
- exit (1);
- }
-
- void *result;
- if (pthread_join (th2, &result) != 0)
- {
- puts ("pthread_join failed");
- exit (1);
- }
-
- exit (result == NULL ? 0 : 1);
- }
- else if (child == -1)
- {
- puts ("initial fork failed");
- exit (1);
- }
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (child, &status, 0)) != child)
- {
- printf ("waitpid failed: %m\n");
- exit (1);
- }
-
- exit (status);
-}
-
-
-int
-main (void)
-{
- initial_pid = getpid ();
-
- pthread_t th1;
- if (pthread_create (&th1, NULL, tf1, NULL) != 0)
- {
- puts ("parent: pthread_create failed");
- exit (1);
- }
-
- /* This call should never return. */
- pthread_join (th1, NULL);
-
- return 1;
-}
diff --git a/test/nptl/tst-fork4.c b/test/nptl/tst-fork4.c
deleted file mode 100644
index ee87108a1..000000000
--- a/test/nptl/tst-fork4.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Test of fork updating child universe's pthread structures.
- Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <string.h>
-
-
-static int
-do_test (void)
-{
- pthread_t me = pthread_self ();
-
- pid_t pid = fork ();
-
- if (pid < 0)
- {
- printf ("fork: %m\n");
- return 1;
- }
-
- if (pid == 0)
- {
- int err = pthread_kill (me, SIGTERM);
- printf ("pthread_kill returned: %s\n", strerror (err));
- return 3;
- }
-
- int status;
- errno = 0;
- if (wait (&status) != pid)
- printf ("wait failed: %m\n");
- else if (WIFSIGNALED (status) && WTERMSIG (status) == SIGTERM)
- {
- printf ("child correctly died with SIGTERM\n");
- return 0;
- }
- else
- printf ("child died with bad status %#x\n", status);
-
- return 1;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-getpid1.c b/test/nptl/tst-getpid1.c
deleted file mode 100644
index 4d25b0de7..000000000
--- a/test/nptl/tst-getpid1.c
+++ /dev/null
@@ -1,122 +0,0 @@
-#include <sched.h>
-#include <signal.h>
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <bits/stackinfo.h>
-
-#ifndef TEST_CLONE_FLAGS
-#define TEST_CLONE_FLAGS 0
-#endif
-
-static int sig;
-
-static int
-f (void *a)
-{
- puts ("in f");
- union sigval sival;
- sival.sival_int = getpid ();
- printf ("pid = %d\n", sival.sival_int);
- if (sigqueue (getppid (), sig, sival) != 0)
- return 1;
- return 0;
-}
-
-
-static int
-do_test (void)
-{
- int mypid = getpid ();
-
- sig = SIGRTMIN;
- sigset_t ss;
- sigemptyset (&ss);
- sigaddset (&ss, sig);
- if (sigprocmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- printf ("sigprocmask failed: %m\n");
- return 1;
- }
-
-#ifdef __ia64__
- extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base,
- size_t __child_stack_size, int __flags,
- void *__arg, ...);
- char st[256 * 1024] __attribute__ ((aligned));
- pid_t p = __clone2 (f, st, sizeof (st), TEST_CLONE_FLAGS, 0);
-#else
- char st[128 * 1024] __attribute__ ((aligned));
-# if _STACK_GROWS_DOWN
- pid_t p = clone (f, st + sizeof (st), TEST_CLONE_FLAGS, 0);
-# elif _STACK_GROWS_UP
- pid_t p = clone (f, st, TEST_CLONE_FLAGS, 0);
-# else
-# error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
-# endif
-#endif
- if (p == -1)
- {
- printf("clone failed: %m\n");
- return 1;
- }
- printf ("new thread: %d\n", (int) p);
-
- siginfo_t si;
- do
- if (sigwaitinfo (&ss, &si) < 0)
- {
- printf("sigwaitinfo failed: %m\n");
- kill (p, SIGKILL);
- return 1;
- }
- while (si.si_signo != sig || si.si_code != SI_QUEUE);
-
- int e;
- if (waitpid (p, &e, __WCLONE) != p)
- {
- puts ("waitpid failed");
- kill (p, SIGKILL);
- return 1;
- }
- if (!WIFEXITED (e))
- {
- if (WIFSIGNALED (e))
- printf ("died from signal %s\n", strsignal (WTERMSIG (e)));
- else
- puts ("did not terminate correctly");
- return 1;
- }
- if (WEXITSTATUS (e) != 0)
- {
- printf ("exit code %d\n", WEXITSTATUS (e));
- return 1;
- }
-
- if (si.si_int != (int) p)
- {
- printf ("expected PID %d, got si_int %d\n", (int) p, si.si_int);
- kill (p, SIGKILL);
- return 1;
- }
-
- if (si.si_pid != p)
- {
- printf ("expected PID %d, got si_pid %d\n", (int) p, (int) si.si_pid);
- kill (p, SIGKILL);
- return 1;
- }
-
- if (getpid () != mypid)
- {
- puts ("my PID changed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-getpid2.c b/test/nptl/tst-getpid2.c
deleted file mode 100644
index fc98cb60d..000000000
--- a/test/nptl/tst-getpid2.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define TEST_CLONE_FLAGS CLONE_VM
-#include "tst-getpid1.c"
diff --git a/test/nptl/tst-getpid3.c b/test/nptl/tst-getpid3.c
deleted file mode 100644
index f1e77f6b1..000000000
--- a/test/nptl/tst-getpid3.c
+++ /dev/null
@@ -1,114 +0,0 @@
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-
-static pid_t pid;
-
-static void *
-pid_thread (void *arg)
-{
- if (pid != getpid ())
- {
- printf ("pid wrong in thread: should be %d, is %d\n",
- (int) pid, (int) getpid ());
- return (void *) 1L;
- }
-
- return NULL;
-}
-
-static int
-do_test (void)
-{
- pid = getpid ();
-
- pthread_t thr;
- int ret = pthread_create (&thr, NULL, pid_thread, NULL);
- if (ret)
- {
- printf ("pthread_create failed: %d\n", ret);
- return 1;
- }
-
- void *thr_ret;
- ret = pthread_join (thr, &thr_ret);
- if (ret)
- {
- printf ("pthread_create failed: %d\n", ret);
- return 1;
- }
- else if (thr_ret)
- {
- printf ("thread getpid failed\n");
- return 1;
- }
-
- pid_t child = fork ();
- if (child == -1)
- {
- printf ("fork failed: %m\n");
- return 1;
- }
- else if (child == 0)
- {
- if (pid == getpid ())
- {
- puts ("pid did not change after fork");
- exit (1);
- }
-
- pid = getpid ();
- ret = pthread_create (&thr, NULL, pid_thread, NULL);
- if (ret)
- {
- printf ("pthread_create failed: %d\n", ret);
- return 1;
- }
-
- ret = pthread_join (thr, &thr_ret);
- if (ret)
- {
- printf ("pthread_create failed: %d\n", ret);
- return 1;
- }
- else if (thr_ret)
- {
- printf ("thread getpid failed\n");
- return 1;
- }
-
- return 0;
- }
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (child, &status, 0)) != child)
- {
- puts ("waitpid failed");
- kill (child, SIGKILL);
- return 1;
- }
-
- if (!WIFEXITED (status))
- {
- if (WIFSIGNALED (status))
- printf ("died from signal %s\n", strsignal (WTERMSIG (status)));
- else
- puts ("did not terminate correctly");
- return 1;
- }
- if (WEXITSTATUS (status) != 0)
- {
- printf ("exit code %d\n", WEXITSTATUS (status));
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-initializers1-c89.c b/test/nptl/tst-initializers1-c89.c
deleted file mode 100644
index 7c27c1d54..000000000
--- a/test/nptl/tst-initializers1-c89.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-initializers1.c"
diff --git a/test/nptl/tst-initializers1-c99.c b/test/nptl/tst-initializers1-c99.c
deleted file mode 100644
index 7c27c1d54..000000000
--- a/test/nptl/tst-initializers1-c99.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-initializers1.c"
diff --git a/test/nptl/tst-initializers1-gnu89.c b/test/nptl/tst-initializers1-gnu89.c
deleted file mode 100644
index 7c27c1d54..000000000
--- a/test/nptl/tst-initializers1-gnu89.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-initializers1.c"
diff --git a/test/nptl/tst-initializers1-gnu99.c b/test/nptl/tst-initializers1-gnu99.c
deleted file mode 100644
index 7c27c1d54..000000000
--- a/test/nptl/tst-initializers1-gnu99.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-initializers1.c"
diff --git a/test/nptl/tst-initializers1.c b/test/nptl/tst-initializers1.c
deleted file mode 100644
index 1e353806b..000000000
--- a/test/nptl/tst-initializers1.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-
-pthread_mutex_t mtx_normal = PTHREAD_MUTEX_INITIALIZER;
-pthread_mutex_t mtx_recursive = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-pthread_mutex_t mtx_errorchk = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
-pthread_mutex_t mtx_adaptive = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
-pthread_rwlock_t rwl_normal = PTHREAD_RWLOCK_INITIALIZER;
-pthread_rwlock_t rwl_writer
- = PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP;
-pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-
-int
-main (void)
-{
- if (mtx_normal.__data.__kind != PTHREAD_MUTEX_TIMED_NP)
- return 1;
- if (mtx_recursive.__data.__kind != PTHREAD_MUTEX_RECURSIVE_NP)
- return 1;
- if (mtx_errorchk.__data.__kind != PTHREAD_MUTEX_ERRORCHECK_NP)
- return 1;
- if (mtx_adaptive.__data.__kind != PTHREAD_MUTEX_ADAPTIVE_NP)
- return 1;
- if (rwl_normal.__data.__flags != PTHREAD_RWLOCK_PREFER_READER_NP)
- return 1;
- if (rwl_writer.__data.__flags
- != PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)
- return 1;
- return 0;
-}
diff --git a/test/nptl/tst-join1.c b/test/nptl/tst-join1.c
deleted file mode 100644
index 681245a1c..000000000
--- a/test/nptl/tst-join1.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-
-
-static void *
-tf (void *arg)
-{
- pthread_t mh = (pthread_t) arg;
- void *result;
-
- if (pthread_mutex_unlock (&lock) != 0)
- {
- puts ("unlock failed");
- exit (1);
- }
-
- if (pthread_join (mh, &result) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (result != (void *) 42l)
- {
- printf ("result wrong: expected %p, got %p\n", (void *) 42, result);
- exit (1);
- }
-
- exit (0);
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("1st lock failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, (void *) pthread_self ()) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("2nd lock failed");
- exit (1);
- }
-
- pthread_exit ((void *) 42);
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-join2.c b/test/nptl/tst-join2.c
deleted file mode 100644
index 03203983c..000000000
--- a/test/nptl/tst-join2.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("child: mutex_lock failed");
- return NULL;
- }
-
- return (void *) 42l;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("mutex_create failed");
- exit (1);
- }
-
- void *status;
- int val = pthread_tryjoin_np (th, &status);
- if (val == 0)
- {
- puts ("1st tryjoin succeeded");
- exit (1);
- }
- else if (val != EBUSY)
- {
- puts ("1st tryjoin didn't return EBUSY");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&lock) != 0)
- {
- puts ("mutex_unlock failed");
- exit (1);
- }
-
- while ((val = pthread_tryjoin_np (th, &status)) != 0)
- {
- if (val != EBUSY)
- {
- printf ("tryjoin returned %s (%d), expected only 0 or EBUSY\n",
- strerror (val), val);
- exit (1);
- }
-
- /* Delay minimally. */
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 };
- nanosleep (&ts, NULL);
- }
-
- if (status != (void *) 42l)
- {
- printf ("return value %p, expected %p\n", status, (void *) 42l);
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-join3.c b/test/nptl/tst-join3.c
deleted file mode 100644
index b25ffd8ba..000000000
--- a/test/nptl/tst-join3.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-
-
-static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("child: mutex_lock failed");
- return NULL;
- }
-
- return (void *) 42l;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("mutex_create failed");
- exit (1);
- }
-
- void *status;
- struct timespec ts;
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_nsec += 200000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
- int val = pthread_timedjoin_np (th, &status, &ts);
- if (val == 0)
- {
- puts ("1st timedjoin succeeded");
- exit (1);
- }
- else if (val != ETIMEDOUT)
- {
- puts ("1st timedjoin didn't return ETIMEDOUT");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&lock) != 0)
- {
- puts ("mutex_unlock failed");
- exit (1);
- }
-
- while (1)
- {
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_nsec += 200000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
-
- val = pthread_timedjoin_np (th, &status, &ts);
- if (val == 0)
- break;
-
- if (val != ETIMEDOUT)
- {
- printf ("timedjoin returned %s (%d), expected only 0 or ETIMEDOUT\n",
- strerror (val), val);
- exit (1);
- }
- }
-
- if (status != (void *) 42l)
- {
- printf ("return value %p, expected %p\n", status, (void *) 42l);
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-join4.c b/test/nptl/tst-join4.c
deleted file mode 100644
index 96b650ddc..000000000
--- a/test/nptl/tst-join4.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_barrier_t bar;
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_barrier_wait (&bar) != 0)
- {
- puts ("tf: barrier_wait failed");
- exit (1);
- }
-
- return (void *) 1l;
-}
-
-
-static int
-do_test (void)
-{
- if (pthread_barrier_init (&bar, NULL, 3) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- pthread_t th[2];
-
- if (pthread_create (&th[0], &a, tf, NULL) != 0)
- {
- puts ("1st create failed");
- exit (1);
- }
-
- if (pthread_attr_setdetachstate (&a, PTHREAD_CREATE_DETACHED) != 0)
- {
- puts ("attr_setdetachstate failed");
- exit (1);
- }
-
- if (pthread_create (&th[1], &a, tf, NULL) != 0)
- {
- puts ("1st create failed");
- exit (1);
- }
-
- if (pthread_attr_destroy (&a) != 0)
- {
- puts ("attr_destroy failed");
- exit (1);
- }
-
- if (pthread_detach (th[0]) != 0)
- {
- puts ("could not detach 1st thread");
- exit (1);
- }
-
- int err = pthread_detach (th[0]);
- if (err == 0)
- {
- puts ("second detach of 1st thread succeeded");
- exit (1);
- }
- if (err != EINVAL)
- {
- printf ("second detach of 1st thread returned %d, not EINVAL\n", err);
- exit (1);
- }
-
- err = pthread_detach (th[1]);
- if (err == 0)
- {
- puts ("detach of 2nd thread succeeded");
- exit (1);
- }
- if (err != EINVAL)
- {
- printf ("detach of 2nd thread returned %d, not EINVAL\n", err);
- exit (1);
- }
-
- exit (0);
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-join5.c b/test/nptl/tst-join5.c
deleted file mode 100644
index feeee2ee3..000000000
--- a/test/nptl/tst-join5.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static void *
-tf1 (void *arg)
-{
- pthread_join ((pthread_t) arg, NULL);
-
- puts ("1st join returned");
-
- return (void *) 1l;
-}
-
-
-static void *
-tf2 (void *arg)
-{
- int a;
- a = pthread_join ((pthread_t) arg, NULL);
-
- puts ("2nd join returned");
- printf("a = %i\n", a);
-
- return (void *) 1l;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- int err = pthread_join (pthread_self (), NULL);
- if (err == 0)
- {
- puts ("1st circular join succeeded");
- exit (1);
- }
- if (err != EDEADLK)
- {
- printf ("1st circular join %d, not EDEADLK\n", err);
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf1, (void *) pthread_self ()) != 0)
- {
- puts ("1st create failed");
- exit (1);
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cannot cancel 1st thread");
- exit (1);
- }
-
- void *r;
- err = pthread_join (th, &r);
- if (err != 0)
- {
- printf ("cannot join 1st thread: %d\n", err);
- exit (1);
- }
- if (r != PTHREAD_CANCELED)
- {
- puts ("1st thread not canceled");
- exit (1);
- }
-
- err = pthread_join (pthread_self (), NULL);
- if (err == 0)
- {
- puts ("2nd circular join succeeded");
- exit (1);
- }
- if (err != EDEADLK)
- {
- printf ("2nd circular join %d, not EDEADLK\n", err);
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf2, (void *) pthread_self ()) != 0)
- {
- puts ("2nd create failed");
- exit (1);
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cannot cancel 2nd thread");
- exit (1);
- }
-
- if (pthread_join (th, &r) != 0)
- {
- puts ("cannot join 2nd thread");
- exit (1);
- }
- if (r != PTHREAD_CANCELED)
- {
- puts ("2nd thread not canceled");
- exit (1);
- }
-
- err = pthread_join (pthread_self (), NULL);
- if (err == 0)
- {
- puts ("2nd circular join succeeded");
- exit (1);
- }
- if (err != EDEADLK)
- {
- printf ("2nd circular join %d, not EDEADLK\n", err);
- exit (1);
- }
-
- exit (0);
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-join6.c b/test/nptl/tst-join6.c
deleted file mode 100644
index 0c9e7c056..000000000
--- a/test/nptl/tst-join6.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WAIT_IN_CHILD 1
-#include "tst-join5.c"
diff --git a/test/nptl/tst-key1.c b/test/nptl/tst-key1.c
deleted file mode 100644
index ebda39533..000000000
--- a/test/nptl/tst-key1.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <limits.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-int
-do_test (void)
-{
- int max;
-#ifdef PTHREAD_KEYS_MAX
- max = PTHREAD_KEYS_MAX;
-#else
- max = _POSIX_THREAD_KEYS_MAX;
-#endif
- pthread_key_t *keys = alloca (max * sizeof (pthread_key_t));
-
- int i;
- for (i = 0; i < max; ++i)
- if (pthread_key_create (&keys[i], NULL) != 0)
- {
- write (2, "key_create failed\n", 18);
- _exit (1);
- }
- else
- {
- printf ("created key %d\n", i);
-
- if (pthread_setspecific (keys[i], (const void *) (i + 100l)) != 0)
- {
- write (2, "setspecific failed\n", 19);
- _exit (1);
- }
- }
-
- for (i = 0; i < max; ++i)
- {
- if (pthread_getspecific (keys[i]) != (void *) (i + 100l))
- {
- write (2, "getspecific failed\n", 19);
- _exit (1);
- }
-
- if (pthread_key_delete (keys[i]) != 0)
- {
- write (2, "key_delete failed\n", 18);
- _exit (1);
- }
- }
-
- /* Now it must be once again possible to allocate keys. */
- if (pthread_key_create (&keys[0], NULL) != 0)
- {
- write (2, "2nd key_create failed\n", 22);
- _exit (1);
- }
-
- if (pthread_key_delete (keys[0]) != 0)
- {
- write (2, "2nd key_delete failed\n", 22);
- _exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-key2.c b/test/nptl/tst-key2.c
deleted file mode 100644
index c32031e60..000000000
--- a/test/nptl/tst-key2.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#define N 2
-
-
-static int cnt0;
-static void
-f0 (void *p)
-{
- ++cnt0;
-}
-
-
-static int cnt1;
-static void
-f1 (void *p)
-{
- ++cnt1;
-}
-
-
-static void (*fcts[N]) (void *) =
-{
- f0,
- f1
-};
-
-
-static void *
-tf (void *arg)
-{
- pthread_key_t *key = (pthread_key_t *) arg;
-
- if (pthread_setspecific (*key, (void *) -1l) != 0)
- {
- write (2, "setspecific failed\n", 19);
- _exit (1);
- }
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_key_t keys[N];
-
- int i;
- for (i = 0; i < N; ++i)
- if (pthread_key_create (&keys[i], fcts[i]) != 0)
- {
- write (2, "key_create failed\n", 18);
- _exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, &keys[1]) != 0)
- {
- write (2, "create failed\n", 14);
- _exit (1);
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- write (2, "join failed\n", 12);
- _exit (1);
- }
-
- if (cnt0 != 0)
- {
- write (2, "cnt0 != 0\n", 10);
- _exit (1);
- }
-
- if (cnt1 != 1)
- {
- write (2, "cnt1 != 1\n", 10);
- _exit (1);
- }
-
- for (i = 0; i < N; ++i)
- if (pthread_key_delete (keys[i]) != 0)
- {
- write (2, "key_delete failed\n", 18);
- _exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-key3.c b/test/nptl/tst-key3.c
deleted file mode 100644
index f5426ce12..000000000
--- a/test/nptl/tst-key3.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#define N 2
-
-
-static int cnt0;
-static void
-f0 (void *p)
-{
- ++cnt0;
-}
-
-
-static int cnt1;
-static void
-f1 (void *p)
-{
- ++cnt1;
-}
-
-
-static void (*fcts[N]) (void *) =
-{
- f0,
- f1
-};
-
-
-static pthread_barrier_t b;
-
-
-static void *
-tf (void *arg)
-{
- pthread_key_t *key = (pthread_key_t *) arg;
-
- if (pthread_setspecific (*key, (void *) -1l) != 0)
- {
- write (2, "setspecific failed\n", 19);
- _exit (1);
- }
-
- pthread_barrier_wait (&b);
-
- const struct timespec t = { .tv_sec = 1000, .tv_nsec = 0 };
- while (1)
- nanosleep (&t, NULL);
-
- /* NOTREACHED */
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_key_t keys[N];
-
- int i;
- for (i = 0; i < N; ++i)
- if (pthread_key_create (&keys[i], fcts[i]) != 0)
- {
- write (2, "key_create failed\n", 18);
- _exit (1);
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- write (2, "barrier_init failed\n", 20);
- _exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, &keys[1]) != 0)
- {
- write (2, "create failed\n", 14);
- _exit (1);
- }
-
- pthread_barrier_wait (&b);
-
- if (pthread_cancel (th) != 0)
- {
- write (2, "cancel failed\n", 14);
- _exit (1);
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- write (2, "join failed\n", 12);
- _exit (1);
- }
-
- if (status != PTHREAD_CANCELED)
- {
- write (2, "thread not canceled\n", 20);
- _exit (1);
- }
-
- /* Note that the TSD destructors not necessarily have to have
- finished by the time pthread_join returns. At least according to
- POSIX. We implement the stronger requirement that they indeed
- have run and therefore these tests succeed. */
- if (cnt0 != 0)
- {
- write (2, "cnt0 != 0\n", 10);
- _exit (1);
- }
-
- if (cnt1 != 1)
- {
- write (2, "cnt1 != 1\n", 10);
- _exit (1);
- }
-
- for (i = 0; i < N; ++i)
- if (pthread_key_delete (keys[i]) != 0)
- {
- write (2, "key_delete failed\n", 18);
- _exit (1);
- }
-
- if (pthread_barrier_destroy (&b) != 0)
- {
- write (2, "barrier_destroy failed\n", 23);
- _exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-key4.c b/test/nptl/tst-key4.c
deleted file mode 100644
index af44c2234..000000000
--- a/test/nptl/tst-key4.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <limits.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-#ifdef PTHREAD_KEYS_MAX
-const int max = PTHREAD_KEYS_MAX;
-#else
-const int max = _POSIX_THREAD_KEYS_MAX;
-#endif
-static pthread_key_t *keys;
-
-
-static void *
-tf1 (void *arg)
-{
- int i;
- for (i = 0; i < max; ++i)
- if (pthread_setspecific (keys[i], (void *) (long int) (i + 1)) != 0)
- {
- puts ("setspecific failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-static void *
-tf2 (void *arg)
-{
- int i;
- for (i = 0; i < max; ++i)
- if (pthread_getspecific (keys[i]) != NULL)
- {
- printf ("getspecific for key %d not NULL\n", i);
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- keys = alloca (max * sizeof (pthread_key_t));
-
- int i;
- for (i = 0; i < max; ++i)
- if (pthread_key_create (&keys[i], NULL) != 0)
- {
- puts ("key_create failed");
- exit (1);
- }
-
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- for (i = 0; i < 10; ++i)
- {
- int j;
-#define N 2
- pthread_t th[N];
- for (j = 0; j < N; ++j)
- if (pthread_create (&th[j], NULL, tf1, NULL) != 0)
- {
- puts ("1st create failed");
- exit (1);
- }
-
- for (j = 0; j < N; ++j)
- if (pthread_join (th[j], NULL) != 0)
- {
- puts ("1st join failed");
- exit (1);
- }
-
- for (j = 0; j < N; ++j)
- if (pthread_create (&th[j], NULL, tf2, NULL) != 0)
- {
- puts ("2nd create failed");
- exit (1);
- }
-
- for (j = 0; j < N; ++j)
- if (pthread_join (th[j], NULL) != 0)
- {
- puts ("2nd join failed");
- exit (1);
- }
- }
-
- if (pthread_attr_destroy (&a) != 0)
- {
- puts ("attr_destroy failed");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-kill1.c b/test/nptl/tst-kill1.c
deleted file mode 100644
index f58016f97..000000000
--- a/test/nptl/tst-kill1.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
-static pthread_barrier_t b;
-
-static void *
-tf (void *a)
-{
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("child: mutex_lock failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: barrier_wait failed");
- exit (1);
- }
-
- /* This call should never return. */
- pthread_cond_wait (&c, &m);
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- /* Send the thread a signal which it doesn't catch and which will
- cause the process to terminate. */
- if (pthread_kill (th, SIGUSR1) != 0)
- {
- puts ("kill failed");
- exit (1);
- }
-
- /* This call should never return. */
- pthread_join (th, NULL);
-
- return 0;
-}
-
-
-#define EXPECTED_SIGNAL SIGUSR1
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-kill2.c b/test/nptl/tst-kill2.c
deleted file mode 100644
index 0315a020f..000000000
--- a/test/nptl/tst-kill2.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-
-static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
-static pthread_barrier_t b;
-
-static void *
-tf (void *a)
-{
- /* Block SIGUSR1. */
- sigset_t ss;
-
- sigemptyset (&ss);
- sigaddset (&ss, SIGUSR1);
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("child: sigmask failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("child: mutex_lock failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: barrier_wait failed");
- exit (1);
- }
-
- /* Compute timeout. */
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- /* Timeout: 1sec. */
- ts.tv_sec += 1;
-
- /* This call should never return. */
- if (pthread_cond_timedwait (&c, &m, &ts) != ETIMEDOUT)
- {
- puts ("cond_timedwait didn't time out");
- exit (1);
- }
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- /* Send the thread a signal which it has blocked. */
- if (pthread_kill (th, SIGUSR1) != 0)
- {
- puts ("kill failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("mutex_unlock failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
- if (r != NULL)
- {
- puts ("return value wrong");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TIMEOUT 5
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-kill3.c b/test/nptl/tst-kill3.c
deleted file mode 100644
index fe9359b39..000000000
--- a/test/nptl/tst-kill3.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
-static pthread_barrier_t b;
-
-
-static void
-handler (int sig)
-{
- write (1, "handler called\n", 15);
- _exit (1);
-}
-
-
-static void *
-tf (void *a)
-{
- /* Block SIGUSR1. */
- sigset_t ss;
-
- sigemptyset (&ss);
- sigaddset (&ss, SIGUSR1);
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("child: sigmask failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("child: mutex_lock failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: barrier_wait failed");
- exit (1);
- }
-
- /* Compute timeout. */
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- /* Timeout: 1sec. */
- ts.tv_sec += 1;
-
- /* This call should never return. */
- if (pthread_cond_timedwait (&c, &m, &ts) != ETIMEDOUT)
- {
- puts ("cond_timedwait didn't time out");
- exit (1);
- }
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- struct sigaction sa;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- sa.sa_handler = handler;
- if (sigaction (SIGUSR1, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- exit (1);
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- /* Send the thread a signal which it has blocked. */
- if (pthread_kill (th, SIGUSR1) != 0)
- {
- puts ("kill failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("mutex_unlock failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- exit (1);
- }
- if (r != NULL)
- {
- puts ("return value wrong");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TIMEOUT 5
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-kill4.c b/test/nptl/tst-kill4.c
deleted file mode 100644
index 4ede7ed5d..000000000
--- a/test/nptl/tst-kill4.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void *
-tf (void *a)
-{
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- /* The following only works because we assume here something about
- the implementation. Namely, that the memory allocated for the
- thread descriptor is not going away, that the the TID field is
- cleared and therefore the signal is sent to process 0, and that
- we can savely assume there is no other process with this ID at
- that time. */
- int e = pthread_kill (th, 0);
- if (e == 0)
- {
- puts ("pthread_kill succeeded");
- exit (1);
- }
- if (e != ESRCH)
- {
- puts ("pthread_kill didn't return ESRCH");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-kill5.c b/test/nptl/tst-kill5.c
deleted file mode 100644
index 254015c36..000000000
--- a/test/nptl/tst-kill5.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-int
-do_test (void)
-{
- /* XXX This test might require architecture and system specific changes.
- There is no guarantee that this signal number is invalid. */
- int e = pthread_kill (pthread_self (), SIGRTMAX + 10);
- if (e == 0)
- {
- puts ("kill didn't failed");
- exit (1);
- }
- if (e != EINVAL)
- {
- puts ("error not EINVAL");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-kill6.c b/test/nptl/tst-kill6.c
deleted file mode 100644
index f530e4ed0..000000000
--- a/test/nptl/tst-kill6.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static pthread_t receiver;
-static sem_t sem;
-static pthread_barrier_t b;
-
-static void
-handler (int sig)
-{
- if (sig != SIGUSR1)
- {
- write (STDOUT_FILENO, "wrong signal\n", 13);
- _exit (1);
- }
-
- if (pthread_self () != receiver)
- {
- write (STDOUT_FILENO, "not the intended receiver\n", 26);
- _exit (1);
- }
-
- if (sem_post (&sem) != 0)
- {
- write (STDOUT_FILENO, "sem_post failed\n", 16);
- _exit (1);
- }
-}
-
-
-static void *
-tf (void *a)
-{
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: barrier_wait failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-int
-do_test (void)
-{
- struct sigaction sa;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- sa.sa_handler = handler;
- if (sigaction (SIGUSR1, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- exit (1);
- }
-
-#define N 20
-
- if (pthread_barrier_init (&b, NULL, N + 1) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- pthread_t th[N];
- int i;
- for (i = 0; i < N; ++i)
- if (pthread_create (&th[i], &a, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- if (pthread_attr_destroy (&a) != 0)
- {
- puts ("attr_destroy failed");
- exit (1);
- }
-
- if (sem_init (&sem, 0, 0) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- for (i = 0; i < N * 10; ++i)
- {
- receiver = th[i % N];
-
- if (pthread_kill (receiver, SIGUSR1) != 0)
- {
- puts ("kill failed");
- exit (1);
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (&sem)) != 0)
- {
- puts ("sem_wait failed");
- exit (1);
- }
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- for (i = 0; i < N; ++i)
- if (pthread_join (th[i], NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue.h b/test/nptl/tst-mqueue.h
deleted file mode 100644
index 1401c3e03..000000000
--- a/test/nptl/tst-mqueue.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Common code for message queue passing tests.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <mqueue.h>
-#include <search.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/uio.h>
-#include <unistd.h>
-
-static int temp_mq_fd;
-
-/* Add temporary files in list. */
-static void
-__attribute__ ((unused))
-add_temp_mq (const char *name)
-{
- struct iovec iov[2];
- iov[0].iov_base = (char *) name;
- iov[0].iov_len = strlen (name);
- iov[1].iov_base = (char *) "\n";
- iov[1].iov_len = 1;
- if (writev (temp_mq_fd, iov, 2) != iov[0].iov_len + 1)
- printf ("Could not record temp mq filename %s\n", name);
-}
-
-/* Delete all temporary message queues. */
-static void
-do_cleanup (void)
-{
- if (lseek (temp_mq_fd, 0, SEEK_SET) != 0)
- return;
-
- FILE *f = fdopen (temp_mq_fd, "r");
- if (f == NULL)
- return;
-
- char *line = NULL;
- size_t n = 0;
- ssize_t rets;
- while ((rets = getline (&line, &n, f)) > 0)
- {
- if (line[rets - 1] != '\n')
- continue;
-
- line[rets - 1] = '\0';
- mq_unlink (line);
- }
- fclose (f);
-}
-
-static void
-do_prepare (void)
-{
- char name [] = "/tmp/tst-mqueueN.XXXXXX";
- temp_mq_fd = mkstemp (name);
- if (temp_mq_fd == -1)
- {
- printf ("Could not create temporary file %s: %m\n", name);
- exit (1);
- }
- unlink (name);
-}
-
-#define PREPARE(argc, argv) do_prepare ()
-#define CLEANUP_HANDLER do_cleanup ()
diff --git a/test/nptl/tst-mqueue1.c b/test/nptl/tst-mqueue1.c
deleted file mode 100644
index 5ec79cf3b..000000000
--- a/test/nptl/tst-mqueue1.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/* Test message queue passing.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <mqueue.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <time.h>
-#include <unistd.h>
-#include "tst-mqueue.h"
-
-static int
-intcmp (const void *a, const void *b)
-{
- if (*(unsigned char *)a < *(unsigned char *)b)
- return 1;
- if (*(unsigned char *)a > *(unsigned char *)b)
- return -1;
- return 0;
-}
-
-static int
-check_attrs (struct mq_attr *attr, int nonblock, long cnt)
-{
- int result = 0;
-
- if (attr->mq_maxmsg != 10 || attr->mq_msgsize != 1)
- {
- printf ("attributes don't match those passed to mq_open\n"
- "mq_maxmsg %ld, mq_msgsize %ld\n",
- attr->mq_maxmsg, attr->mq_msgsize);
- result = 1;
- }
-
- if ((attr->mq_flags & O_NONBLOCK) != nonblock)
- {
- printf ("mq_flags %lx != %x\n", (attr->mq_flags & O_NONBLOCK), nonblock);
- result = 1;
- }
-
- if (attr->mq_curmsgs != cnt)
- {
- printf ("mq_curmsgs %ld != %ld\n", attr->mq_curmsgs, cnt);
- result = 1;
- }
-
- return result;
-}
-
-static int
-do_one_test (mqd_t q, const char *name, int nonblock)
-{
- int result = 0;
-
- char v []
- = { 0x32, 0x62, 0x22, 0x31, 0x11, 0x73, 0x61, 0x21, 0x72, 0x71, 0x81 };
-
- struct mq_attr attr;
- memset (&attr, 0xaa, sizeof (attr));
- if (mq_getattr (q, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
- else
- result |= check_attrs (&attr, nonblock, 0);
-
- if (mq_receive (q, &v[0], 1, NULL) != -1)
- {
- puts ("mq_receive on O_WRONLY mqd_t unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_receive on O_WRONLY mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- struct timespec ts;
- if (clock_gettime (CLOCK_REALTIME, &ts) == 0)
- --ts.tv_sec;
- else
- {
- ts.tv_sec = time (NULL) - 1;
- ts.tv_nsec = 0;
- }
-
- int ret;
- for (int i = 0; i < 10; ++i)
- {
- if (i & 1)
- ret = mq_send (q, &v[i], 1, v[i] >> 4);
- else
- ret = mq_timedsend (q, &v[i], 1, v[i] >> 4, &ts);
-
- if (ret)
- {
- printf ("mq_%ssend failed: %m\n", (i & 1) ? "" : "timed");
- result = 1;
- }
- }
-
- ret = mq_timedsend (q, &v[10], 1, 8, &ts);
- if (ret != -1)
- {
- puts ("mq_timedsend on full queue did not fail");
- result = 1;
- }
- else if (errno != (nonblock ? EAGAIN : ETIMEDOUT))
- {
- printf ("mq_timedsend on full queue did not fail with %s: %m\n",
- nonblock ? "EAGAIN" : "ETIMEDOUT");
- result = 1;
- }
-
- if (nonblock)
- {
- ret = mq_send (q, &v[10], 1, 8);
- if (ret != -1)
- {
- puts ("mq_send on full non-blocking queue did not fail");
- result = 1;
- }
- else if (errno != EAGAIN)
- {
- printf ("mq_send on full non-blocking queue did not fail"
- "with EAGAIN: %m\n");
- result = 1;
- }
- }
-
- memset (&attr, 0xaa, sizeof (attr));
- if (mq_getattr (q, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
- else
- result |= check_attrs (&attr, nonblock, 10);
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- printf ("fork failed: %m\n");
- result = 1;
- }
- else if (pid == 0)
- {
- result = 0;
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close in child failed: %m\n");
- result = 1;
- }
-
- q = mq_open (name, O_RDONLY | nonblock);
- if (q == (mqd_t) -1)
- {
- printf ("mq_open in child failed: %m\n");
- exit (1);
- }
-
- memset (&attr, 0xaa, sizeof (attr));
- if (mq_getattr (q, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
- else
- result |= check_attrs (&attr, nonblock, 10);
-
- char vr[11] = { };
- unsigned int prio;
- ssize_t rets;
-
- if (mq_send (q, &v[0], 1, 1) != -1)
- {
- puts ("mq_send on O_RDONLY mqd_t unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_send on O_WRONLY mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- for (int i = 0; i < 10; ++i)
- {
- if (i & 1)
- rets = mq_receive (q, &vr[i], 1, &prio);
- else
- rets = mq_timedreceive (q, &vr[i], 1, &prio, &ts);
-
- if (rets != 1)
- {
- if (rets == -1)
- printf ("mq_%sreceive failed: %m\n", (i & 1) ? "" : "timed");
- else
- printf ("mq_%sreceive returned %zd != 1\n",
- (i & 1) ? "" : "timed", rets);
- result = 1;
- }
- else if (prio != (unsigned int) vr[i] >> 4)
- {
- printf ("unexpected priority %x for value %02x\n", prio,
- vr[i]);
- result = 1;
- }
- }
-
- qsort (v, 10, 1, intcmp);
- if (memcmp (v, vr, 10) != 0)
- {
- puts ("messages not received in expected order");
- result = 1;
- }
-
- rets = mq_timedreceive (q, &vr[10], 1, &prio, &ts);
- if (rets != -1)
- {
- puts ("mq_timedreceive on empty queue did not fail");
- result = 1;
- }
- else if (errno != (nonblock ? EAGAIN : ETIMEDOUT))
- {
- printf ("mq_timedreceive on empty queue did not fail with %s: %m\n",
- nonblock ? "EAGAIN" : "ETIMEDOUT");
- result = 1;
- }
-
- if (nonblock)
- {
- ret = mq_receive (q, &vr[10], 1, &prio);
- if (ret != -1)
- {
- puts ("mq_receive on empty non-blocking queue did not fail");
- result = 1;
- }
- else if (errno != EAGAIN)
- {
- printf ("mq_receive on empty non-blocking queue did not fail"
- "with EAGAIN: %m\n");
- result = 1;
- }
- }
-
- memset (&attr, 0xaa, sizeof (attr));
- if (mq_getattr (q, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
- else
- result |= check_attrs (&attr, nonblock, 0);
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close in child failed: %m\n");
- result = 1;
- }
-
- exit (result);
- }
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- printf ("waitpid failed: %m\n");
- kill (pid, SIGKILL);
- result = 1;
- }
- else if (!WIFEXITED (status) || WEXITSTATUS (status))
- {
- printf ("child failed: %d\n", status);
- result = 1;
- }
-
- memset (&attr, 0xaa, sizeof (attr));
- if (mq_getattr (q, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
- else
- result |= check_attrs (&attr, nonblock, 0);
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- int result = 0;
-
- char name[sizeof "/tst-mqueue1-" + sizeof (pid_t) * 3];
- snprintf (name, sizeof (name), "/tst-mqueue1-%u", getpid ());
-
- struct mq_attr attr = { .mq_maxmsg = 10, .mq_msgsize = 1 };
- mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_WRONLY, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return result;
- }
- else
- add_temp_mq (name);
-
- result |= do_one_test (q, name, 0);
-
- mqd_t q2 = mq_open (name, O_WRONLY | O_NONBLOCK);
- if (q2 == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- q2 = q;
- result = 1;
- }
- else
- {
- if (mq_close (q) != 0)
- {
- printf ("mq_close in parent failed: %m\n");
- result = 1;
- }
-
- q = q2;
- result |= do_one_test (q, name, O_NONBLOCK);
-
- if (mq_getattr (q, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
- else
- {
- attr.mq_flags ^= O_NONBLOCK;
-
- struct mq_attr attr2;
- memset (&attr2, 0x55, sizeof (attr2));
- if (mq_setattr (q, &attr, &attr2) != 0)
- {
- printf ("mq_setattr failed: %m\n");
- result = 1;
- }
- else if (attr.mq_flags != (attr2.mq_flags ^ O_NONBLOCK)
- || attr.mq_maxmsg != attr2.mq_maxmsg
- || attr.mq_msgsize != attr2.mq_msgsize
- || attr.mq_curmsgs != 0
- || attr2.mq_curmsgs != 0)
- {
- puts ("mq_setattr returned unexpected values in *omqstat");
- result = 1;
- }
- else
- {
- result |= do_one_test (q, name, 0);
-
- if (mq_setattr (q, &attr2, NULL) != 0)
- {
- printf ("mq_setattr failed: %m\n");
- result = 1;
- }
- else
- result |= do_one_test (q, name, O_NONBLOCK);
- }
- }
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close in parent failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q) != -1)
- {
- puts ("second mq_close did not fail");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("second mq_close did not fail with EBADF: %m\n");
- result = 1;
- }
-
- return result;
-}
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue2.c b/test/nptl/tst-mqueue2.c
deleted file mode 100644
index 9fbaedd90..000000000
--- a/test/nptl/tst-mqueue2.c
+++ /dev/null
@@ -1,476 +0,0 @@
-/* Test message queue passing.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <mqueue.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <time.h>
-#include <unistd.h>
-#include "tst-mqueue.h"
-
-static void
-alrm_handler (int sig)
-{
-}
-
-#define TIMEOUT 10
-#define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- int result = 0;
-
- char name[sizeof "/tst-mqueue2-" + sizeof (pid_t) * 3];
- snprintf (name, sizeof (name), "/tst-mqueue2-%u", getpid ());
-
- struct mq_attr attr = { .mq_maxmsg = 2, .mq_msgsize = 2 };
- mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return result;
- }
- else
- add_temp_mq (name);
-
- mqd_t q2 = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
- if (q2 != (mqd_t) -1)
- {
- puts ("mq_open with O_EXCL unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EEXIST)
- {
- printf ("mq_open did not fail with EEXIST: %m\n");
- result = 1;
- }
-
- char name2[sizeof "/tst-mqueue2-2-" + sizeof (pid_t) * 3];
- snprintf (name2, sizeof (name2), "/tst-mqueue2-2-%u", getpid ());
-
- attr.mq_maxmsg = -2;
- q2 = mq_open (name2, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
- if (q2 != (mqd_t) -1)
- {
- puts ("mq_open with invalid mq_maxmsg unexpectedly succeeded");
- add_temp_mq (name2);
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("mq_open with invalid mq_maxmsg did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- attr.mq_maxmsg = 2;
- attr.mq_msgsize = -56;
- q2 = mq_open (name2, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
- if (q2 != (mqd_t) -1)
- {
- puts ("mq_open with invalid mq_msgsize unexpectedly succeeded");
- add_temp_mq (name2);
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("mq_open with invalid mq_msgsize did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- char buf[3];
- struct timespec ts;
- if (clock_gettime (CLOCK_REALTIME, &ts) == 0)
- ts.tv_sec += 10;
- else
- {
- ts.tv_sec = time (NULL) + 10;
- ts.tv_nsec = 0;
- }
-
- if (mq_timedreceive (q, buf, 1, NULL, &ts) == 0)
- {
- puts ("mq_timedreceive with too small msg_len did not fail");
- result = 1;
- }
- else if (errno != EMSGSIZE)
- {
- printf ("mq_timedreceive with too small msg_len did not fail with "
- "EMSGSIZE: %m\n");
- result = 1;
- }
-
- ts.tv_nsec = -1;
- if (mq_timedreceive (q, buf, 2, NULL, &ts) == 0)
- {
- puts ("mq_timedreceive with negative tv_nsec did not fail");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("mq_timedreceive with negative tv_nsec did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- ts.tv_nsec = 1000000000;
- if (mq_timedreceive (q, buf, 2, NULL, &ts) == 0)
- {
- puts ("mq_timedreceive with tv_nsec >= 1000000000 did not fail");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("mq_timedreceive with tv_nsec >= 1000000000 did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- struct sigaction sa = { .sa_handler = alrm_handler, .sa_flags = 0 };
- sigemptyset (&sa.sa_mask);
- sigaction (SIGALRM, &sa, NULL);
-
- struct itimerval it = { .it_value = { .tv_sec = 1 } };
- setitimer (ITIMER_REAL, &it, NULL);
-
- if (mq_receive (q, buf, 2, NULL) == 0)
- {
- puts ("mq_receive on empty queue did not block");
- result = 1;
- }
- else if (errno != EINTR)
- {
- printf ("mq_receive on empty queue did not fail with EINTR: %m\n");
- result = 1;
- }
-
- setitimer (ITIMER_REAL, &it, NULL);
-
- ts.tv_nsec = 0;
- if (mq_timedreceive (q, buf, 2, NULL, &ts) == 0)
- {
- puts ("mq_timedreceive on empty queue did not block");
- result = 1;
- }
- else if (errno != EINTR)
- {
- printf ("mq_timedreceive on empty queue did not fail with EINTR: %m\n");
- result = 1;
- }
-
- buf[0] = '6';
- buf[1] = '7';
- if (mq_send (q, buf, 2, 3) != 0
- || (buf[0] = '8', mq_send (q, buf, 1, 4) != 0))
- {
- printf ("mq_send failed: %m\n");
- result = 1;
- }
-
- memset (buf, ' ', sizeof (buf));
-
- unsigned int prio;
- ssize_t rets = mq_receive (q, buf, 3, &prio);
- if (rets != 1)
- {
- if (rets == -1)
- printf ("mq_receive failed: %m\n");
- else
- printf ("mq_receive returned %zd != 1\n", rets);
- result = 1;
- }
- else if (prio != 4 || memcmp (buf, "8 ", 3) != 0)
- {
- printf ("mq_receive prio %u (4) buf \"%c%c%c\" (\"8 \")\n",
- prio, buf[0], buf[1], buf[2]);
- result = 1;
- }
-
- rets = mq_receive (q, buf, 2, NULL);
- if (rets != 2)
- {
- if (rets == -1)
- printf ("mq_receive failed: %m\n");
- else
- printf ("mq_receive returned %zd != 2\n", rets);
- result = 1;
- }
- else if (memcmp (buf, "67 ", 3) != 0)
- {
- printf ("mq_receive buf \"%c%c%c\" != \"67 \"\n",
- buf[0], buf[1], buf[2]);
- result = 1;
- }
-
- buf[0] = '2';
- buf[1] = '1';
- if (clock_gettime (CLOCK_REALTIME, &ts) != 0)
- ts.tv_sec = time (NULL);
- ts.tv_nsec = -1000000001;
- if ((mq_timedsend (q, buf, 2, 5, &ts) != 0
- && (errno != EINVAL || mq_send (q, buf, 2, 5) != 0))
- || (buf[0] = '3', ts.tv_nsec = -ts.tv_nsec,
- (mq_timedsend (q, buf, 1, 4, &ts) != 0
- && (errno != EINVAL || mq_send (q, buf, 1, 4) != 0))))
- {
- printf ("mq_timedsend failed: %m\n");
- result = 1;
- }
-
- buf[0] = '-';
- ts.tv_nsec = 1000000001;
- if (mq_timedsend (q, buf, 1, 6, &ts) == 0)
- {
- puts ("mq_timedsend with tv_nsec >= 1000000000 did not fail");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("mq_timedsend with tv_nsec >= 1000000000 did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- ts.tv_nsec = -2;
- if (mq_timedsend (q, buf, 1, 6, &ts) == 0)
- {
- puts ("mq_timedsend with negative tv_nsec did not fail");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("mq_timedsend with megatove tv_nsec did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- setitimer (ITIMER_REAL, &it, NULL);
-
- if (mq_send (q, buf, 2, 8) == 0)
- {
- puts ("mq_send on full queue did not block");
- result = 1;
- }
- else if (errno != EINTR)
- {
- printf ("mq_send on full queue did not fail with EINTR: %m\n");
- result = 1;
- }
-
- setitimer (ITIMER_REAL, &it, NULL);
-
- ts.tv_sec += 10;
- ts.tv_nsec = 0;
- if (mq_timedsend (q, buf, 2, 7, &ts) == 0)
- {
- puts ("mq_timedsend on full queue did not block");
- result = 1;
- }
- else if (errno != EINTR)
- {
- printf ("mq_timedsend on full queue did not fail with EINTR: %m\n");
- result = 1;
- }
-
- memset (buf, ' ', sizeof (buf));
-
- if (clock_gettime (CLOCK_REALTIME, &ts) != 0)
- ts.tv_sec = time (NULL);
- ts.tv_nsec = -1000000001;
- rets = mq_timedreceive (q, buf, 2, &prio, &ts);
- if (rets == -1 && errno == EINVAL)
- rets = mq_receive (q, buf, 2, &prio);
- if (rets != 2)
- {
- if (rets == -1)
- printf ("mq_timedreceive failed: %m\n");
- else
- printf ("mq_timedreceive returned %zd != 2\n", rets);
- result = 1;
- }
- else if (prio != 5 || memcmp (buf, "21 ", 3) != 0)
- {
- printf ("mq_timedreceive prio %u (5) buf \"%c%c%c\" (\"21 \")\n",
- prio, buf[0], buf[1], buf[2]);
- result = 1;
- }
-
- if (mq_receive (q, buf, 1, NULL) == 0)
- {
- puts ("mq_receive with too small msg_len did not fail");
- result = 1;
- }
- else if (errno != EMSGSIZE)
- {
- printf ("mq_receive with too small msg_len did not fail with "
- "EMSGSIZE: %m\n");
- result = 1;
- }
-
- ts.tv_nsec = -ts.tv_nsec;
- rets = mq_timedreceive (q, buf, 2, NULL, &ts);
- if (rets == -1 && errno == EINVAL)
- rets = mq_receive (q, buf, 2, NULL);
- if (rets != 1)
- {
- if (rets == -1)
- printf ("mq_timedreceive failed: %m\n");
- else
- printf ("mq_timedreceive returned %zd != 1\n", rets);
- result = 1;
- }
- else if (memcmp (buf, "31 ", 3) != 0)
- {
- printf ("mq_timedreceive buf \"%c%c%c\" != \"31 \"\n",
- buf[0], buf[1], buf[2]);
- result = 1;
- }
-
- if (mq_send (q, "", 0, 2) != 0)
- {
- printf ("mq_send with msg_len 0 failed: %m\n");
- result = 1;
- }
-
- rets = mq_receive (q, buf, 2, &prio);
- if (rets)
- {
- if (rets == -1)
- printf ("mq_receive failed: %m\n");
- else
- printf ("mq_receive returned %zd != 0\n", rets);
- result = 1;
- }
-
- long mq_prio_max = sysconf (_SC_MQ_PRIO_MAX);
- if (mq_prio_max > 0 && (unsigned int) mq_prio_max == mq_prio_max)
- {
- if (mq_send (q, buf, 1, mq_prio_max) == 0)
- {
- puts ("mq_send with MQ_PRIO_MAX priority unpexpectedly succeeded");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("mq_send with MQ_PRIO_MAX priority did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- if (mq_send (q, buf, 1, mq_prio_max - 1) != 0)
- {
- printf ("mq_send with MQ_PRIO_MAX-1 priority failed: %m\n");
- result = 1;
- }
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed: %m\n");
- result = 1;
- }
-
- q2 = mq_open (name, O_RDWR);
- if (q2 != (mqd_t) -1)
- {
- printf ("mq_open of unlinked %s without O_CREAT unexpectedly"
- "succeeded\n", name);
- result = 1;
- }
- else if (errno != ENOENT)
- {
- printf ("mq_open of unlinked %s without O_CREAT did not fail with "
- "ENOENT: %m\n", name);
- result = 1;
- }
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close in parent failed: %m\n");
- result = 1;
- }
-
- if (mq_receive (q, buf, 2, NULL) == 0)
- {
- puts ("mq_receive on invalid mqd_t did not fail");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_receive on invalid mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- if (mq_send (q, buf, 1, 2) == 0)
- {
- puts ("mq_send on invalid mqd_t did not fail");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_send on invalid mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- if (mq_getattr (q, &attr) == 0)
- {
- puts ("mq_getattr on invalid mqd_t did not fail");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_getattr on invalid mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- memset (&attr, 0, sizeof (attr));
- if (mq_setattr (q, &attr, NULL) == 0)
- {
- puts ("mq_setattr on invalid mqd_t did not fail");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_setattr on invalid mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- if (mq_unlink ("/tst-mqueue2-which-should-never-exist") != -1)
- {
- puts ("mq_unlink of non-existant message queue unexpectedly succeeded");
- result = 1;
- }
- else if (errno != ENOENT)
- {
- printf ("mq_unlink of non-existant message queue did not fail with "
- "ENOENT: %m\n");
- result = 1;
- }
- return result;
-}
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue3.c b/test/nptl/tst-mqueue3.c
deleted file mode 100644
index 5686f43f7..000000000
--- a/test/nptl/tst-mqueue3.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/* Test SIGEV_THREAD handling for POSIX message queues.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <mqueue.h>
-#include <signal.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#if _POSIX_THREADS
-# include <pthread.h>
-
-static pid_t pid;
-static mqd_t m;
-static const char message[] = "hello";
-
-# define MAXMSG 10
-# define MSGSIZE 10
-# define UNIQUE 42
-
-
-static void
-fct (union sigval s)
-{
- /* Put the mq in non-blocking mode. */
- struct mq_attr attr;
- if (mq_getattr (m, &attr) != 0)
- {
- printf ("%s: mq_getattr failed: %m\n", __FUNCTION__);
- exit (1);
- }
- attr.mq_flags |= O_NONBLOCK;
- if (mq_setattr (m, &attr, NULL) != 0)
- {
- printf ("%s: mq_setattr failed: %m\n", __FUNCTION__);
- exit (1);
- }
-
- /* Check the values. */
- if (attr.mq_maxmsg != MAXMSG)
- {
- printf ("%s: mq_maxmsg wrong: is %ld, expecte %d\n",
- __FUNCTION__, attr.mq_maxmsg, MAXMSG);
- exit (1);
- }
- if (attr.mq_msgsize != MAXMSG)
- {
- printf ("%s: mq_msgsize wrong: is %ld, expecte %d\n",
- __FUNCTION__, attr.mq_msgsize, MSGSIZE);
- exit (1);
- }
-
- /* Read the message. */
- char buf[attr.mq_msgsize];
- ssize_t n = TEMP_FAILURE_RETRY (mq_receive (m, buf, attr.mq_msgsize, NULL));
- if (n != sizeof (message))
- {
- printf ("%s: length of message wrong: is %zd, expected %zu\n",
- __FUNCTION__, n, sizeof (message));
- exit (1);
- }
- if (memcmp (buf, message, sizeof (message)) != 0)
- {
- printf ("%s: message wrong: is \"%s\", expected \"%s\"\n",
- __FUNCTION__, buf, message);
- exit (1);
- }
-
- exit (UNIQUE);
-}
-
-
-int
-do_test (void)
-{
- char tmpfname[] = "/tmp/tst-mqueue3-barrier.XXXXXX";
- int fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- size_t ps = sysconf (_SC_PAGESIZE);
- char data[ps];
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- void *mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- pthread_barrier_t *b;
- b = (pthread_barrier_t *) (((uintptr_t) mem + __alignof (pthread_barrier_t))
- & ~(__alignof (pthread_barrier_t) - 1));
-
- pthread_barrierattr_t a;
- if (pthread_barrierattr_init (&a) != 0)
- {
- puts ("barrierattr_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("barrierattr_setpshared failed, could not test");
- return 0;
- }
-
- if (pthread_barrier_init (b, &a, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_destroy (&a) != 0)
- {
- puts ("barrierattr_destroy failed");
- return 1;
- }
-
- /* Name for the message queue. */
- char mqname[sizeof ("/tst-mqueue3-") + 3 * sizeof (pid_t)];
- snprintf (mqname, sizeof (mqname) - 1, "/tst-mqueue3-%ld",
- (long int) getpid ());
-
- /* Create the message queue. */
- struct mq_attr attr = { .mq_maxmsg = MAXMSG, .mq_msgsize = MSGSIZE };
- m = mq_open (mqname, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
- if (m == -1)
- {
- if (errno == ENOSYS)
- {
- puts ("not implemented");
- return 0;
- }
-
- puts ("mq_open failed");
- return 1;
- }
-
- /* Unlink the message queue right away. */
- if (mq_unlink (mqname) != 0)
- {
- puts ("mq_unlink failed");
- return 1;
- }
-
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- if (pid == 0)
- {
- /* Request notification via thread. */
- struct sigevent ev;
- ev.sigev_notify = SIGEV_THREAD;
- ev.sigev_notify_function = fct;
- ev.sigev_value.sival_ptr = NULL;
- ev.sigev_notify_attributes = NULL;
-
- /* Tell the kernel. */
- if (mq_notify (m,&ev) != 0)
- {
- puts ("mq_notify failed");
- exit (1);
- }
-
- /* Tell the parent we are ready. */
- (void) pthread_barrier_wait (b);
-
- /* Make sure the process goes away eventually. */
- alarm (10);
-
- /* Do nothing forever. */
- while (1)
- pause ();
- }
-
- /* Wait for the child process to register to notification method. */
- (void) pthread_barrier_wait (b);
-
- /* Send the message. */
- if (mq_send (m, message, sizeof (message), 1) != 0)
- {
- kill (pid, SIGKILL);
- puts ("mq_send failed");
- return 1;
- }
-
- int r;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &r, 0)) != pid)
- {
- kill (pid, SIGKILL);
- puts ("waitpid failed");
- return 1;
- }
-
- return WIFEXITED (r) && WEXITSTATUS (r) == UNIQUE ? 0 : 1;
-}
-# define TEST_FUNCTION do_test ()
-#else
-# define TEST_FUNCTION 0
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue4.c b/test/nptl/tst-mqueue4.c
deleted file mode 100644
index 87ef0c3c0..000000000
--- a/test/nptl/tst-mqueue4.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* Test message queue passing.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <mqueue.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <time.h>
-#include <unistd.h>
-#include "tst-mqueue.h"
-
-#define TIMEOUT 4
-#define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- int result = 0;
-
- char name[sizeof "/tst-mqueue4-" + sizeof (pid_t) * 3 + NAME_MAX];
- char *p;
- p = name + snprintf (name, sizeof (name), "/tst-mqueue4-%u", getpid ());
- struct mq_attr attr = { .mq_maxmsg = 2, .mq_msgsize = 2 };
- mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return result;
- }
- else
- add_temp_mq (name);
-
- *p = '.';
- memset (p + 1, 'x', NAME_MAX + 1 - (p - name));
- name[NAME_MAX + 1] = '\0';
-
- mqd_t q2 = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
- if (q2 == (mqd_t) -1)
- {
- printf ("mq_open with NAME_MAX long name compoment failed with: %m\n");
- result = 1;
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q2) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- name[NAME_MAX + 1] = 'x';
- name[NAME_MAX + 2] = '\0';
- q2 = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
- if (q2 != (mqd_t) -1)
- {
- puts ("mq_open with too long name component unexpectedly succeeded");
- mq_unlink (name);
- mq_close (q2);
- result = 1;
- }
- else if (errno != ENAMETOOLONG)
- {
- printf ("mq_open with too long name component did not fail with "
- "ENAMETOOLONG: %m\n");
- result = 1;
- }
-
- if (mq_unlink (name) == 0)
- {
- puts ("mq_unlink with too long name component unexpectedly succeeded");
- result = 1;
- }
- else if (errno != ENAMETOOLONG)
- {
- printf ("mq_unlink with too long name component did not fail with "
- "ENAMETOOLONG: %m\n");
- result = 1;
- }
-
- *p = '\0';
- attr.mq_maxmsg = 1;
- attr.mq_msgsize = 3;
- q2 = mq_open (name, O_CREAT | O_RDWR, 0600, &attr);
- if (q2 == (mqd_t) -1)
- {
- printf ("mq_open without O_EXCL failed with %m\n");
- result = 1;
- }
-
- char buf[3];
- strcpy (buf, "jk");
- if (mq_send (q, buf, 2, 4) != 0)
- {
- printf ("mq_send failed: %m\n");
- result = 1;
- }
-
- if (mq_send (q, buf + 1, 1, 5) != 0)
- {
- printf ("mq_send failed: %m\n");
- result = 1;
- }
-
- if (mq_getattr (q2, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
-
- if ((attr.mq_flags & O_NONBLOCK)
- || attr.mq_maxmsg != 2
- || attr.mq_msgsize != 2
- || attr.mq_curmsgs != 2)
- {
- printf ("mq_getattr returned unexpected { .mq_flags = %ld,\n"
- ".mq_maxmsg = %ld, .mq_msgsize = %ld, .mq_curmsgs = %ld }\n",
- attr.mq_flags, attr.mq_maxmsg, attr.mq_msgsize, attr.mq_curmsgs);
- result = 1;
- }
-
- struct timespec ts;
- if (clock_gettime (CLOCK_REALTIME, &ts) == 0)
- ++ts.tv_sec;
- else
- {
- ts.tv_sec = time (NULL) + 1;
- ts.tv_nsec = 0;
- }
-
- if (mq_timedsend (q2, buf, 1, 1, &ts) == 0)
- {
- puts ("mq_timedsend unexpectedly succeeded");
- result = 1;
- }
- else if (errno != ETIMEDOUT)
- {
- printf ("mq_timedsend did not fail with ETIMEDOUT: %m\n");
- result = 1;
- }
-
- if (mq_close (q2) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- q2 = mq_open (name, O_RDONLY, 0600);
- if (q2 == (mqd_t) -1)
- {
- printf ("mq_open without O_CREAT failed with %m\n");
- result = 1;
- }
-
- mqd_t q3 = mq_open (name, O_RDONLY, 0600);
- if (q3 == (mqd_t) -1)
- {
- printf ("mq_open without O_CREAT failed with %m\n");
- result = 1;
- }
-
- memset (buf, ' ', sizeof (buf));
-
- unsigned int prio;
- ssize_t rets = mq_receive (q2, buf, 2, &prio);
- if (rets != 1)
- {
- if (rets == -1)
- printf ("mq_receive failed with: %m\n");
- else
- printf ("mq_receive returned %zd != 1\n", rets);
- result = 1;
- }
- else if (prio != 5 || memcmp (buf, "k ", 3) != 0)
- {
- printf ("mq_receive returned prio %u (2) buf \"%c%c%c\" (\"k \")\n",
- prio, buf[0], buf[1], buf[2]);
- result = 1;
- }
-
- if (mq_getattr (q3, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- result = 1;
- }
-
- if ((attr.mq_flags & O_NONBLOCK)
- || attr.mq_maxmsg != 2
- || attr.mq_msgsize != 2
- || attr.mq_curmsgs != 1)
- {
- printf ("mq_getattr returned unexpected { .mq_flags = %ld,\n"
- ".mq_maxmsg = %ld, .mq_msgsize = %ld, .mq_curmsgs = %ld }\n",
- attr.mq_flags, attr.mq_maxmsg, attr.mq_msgsize, attr.mq_curmsgs);
- result = 1;
- }
-
- rets = mq_receive (q3, buf, 2, NULL);
- if (rets != 2)
- {
- if (rets == -1)
- printf ("mq_receive failed with: %m\n");
- else
- printf ("mq_receive returned %zd != 2\n", rets);
- result = 1;
- }
- else if (memcmp (buf, "jk ", 3) != 0)
- {
- printf ("mq_receive returned buf \"%c%c%c\" != \"jk \"\n",
- buf[0], buf[1], buf[2]);
- result = 1;
- }
-
- if (clock_gettime (CLOCK_REALTIME, &ts) == 0)
- ++ts.tv_sec;
- else
- {
- ts.tv_sec = time (NULL) + 1;
- ts.tv_nsec = 0;
- }
-
- if (mq_timedreceive (q2, buf, 2, NULL, &ts) != -1)
- {
- puts ("mq_timedreceive on empty queue unexpectedly succeeded");
- result = 1;
- }
- else if (errno != ETIMEDOUT)
- {
- printf ("mq_timedreceive on empty queue did not fail with "
- "ETIMEDOUT: %m\n");
- result = 1;
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q2) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q3) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- return result;
-}
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue5.c b/test/nptl/tst-mqueue5.c
deleted file mode 100644
index 58e2ebfb4..000000000
--- a/test/nptl/tst-mqueue5.c
+++ /dev/null
@@ -1,1013 +0,0 @@
-/* Test mq_notify.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <mqueue.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <time.h>
-#include <unistd.h>
-#include "tst-mqueue.h"
-
-#define TIMEOUT 3
-
-#if _POSIX_THREADS
-# include <pthread.h>
-
-volatile int rtmin_cnt;
-volatile pid_t rtmin_pid;
-volatile uid_t rtmin_uid;
-volatile int rtmin_code;
-volatile union sigval rtmin_sigval;
-
-static void
-rtmin_handler (int sig, siginfo_t *info, void *ctx)
-{
- if (sig != SIGRTMIN)
- abort ();
- ++rtmin_cnt;
- rtmin_pid = info->si_pid;
- rtmin_uid = info->si_uid;
- rtmin_code = info->si_code;
- rtmin_sigval = info->si_value;
-}
-
-#define mqsend(q) (mqsend) (q, __LINE__)
-static int
-(mqsend) (mqd_t q, int line)
-{
- char c;
- if (mq_send (q, &c, 1, 1) != 0)
- {
- printf ("mq_send on line %d failed with: %m\n", line);
- return 1;
- }
- return 0;
-}
-
-#define mqrecv(q) (mqrecv) (q, __LINE__)
-static int
-(mqrecv) (mqd_t q, int line)
-{
- char c;
- ssize_t rets = TEMP_FAILURE_RETRY (mq_receive (q, &c, 1, NULL));
- if (rets != 1)
- {
- if (rets == -1)
- printf ("mq_receive on line %d failed with: %m\n", line);
- else
- printf ("mq_receive on line %d returned %zd != 1\n",
- line, rets);
- return 1;
- }
- return 0;
-}
-
-struct thr_data
-{
- const char *name;
- pthread_barrier_t *b3;
- mqd_t q;
-};
-
-static void *
-thr (void *arg)
-{
- pthread_barrier_t *b3 = ((struct thr_data *)arg)->b3;
- mqd_t q = ((struct thr_data *)arg)->q;
- const char *name = ((struct thr_data *)arg)->name;
- int result = 0;
-
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been sent. */
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- if (rtmin_cnt != 2)
- {
- puts ("SIGRTMIN signal in child did not arrive");
- result = 1;
- }
- else if (rtmin_pid != getppid ()
- || rtmin_uid != getuid ()
- || rtmin_code != SI_MESGQ
- || rtmin_sigval.sival_int != 0xdeadbeef)
- {
- printf ("unexpected siginfo_t fields: pid %u (%u), uid %u (%u), code %d (%d), si_int %d (%d)\n",
- rtmin_pid, getppid (), rtmin_uid, getuid (),
- rtmin_code, SI_MESGQ, rtmin_sigval.sival_int, 0xdeadbeef);
- result = 1;
- }
-
- struct sigevent ev;
- memset (&ev, 0x82, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("mq_notify in thread (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q, NULL) != 0)
- {
- printf ("mq_notify in thread (q, NULL) failed with: %m\n");
- result = 1;
- }
-
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b3);
-
- /* Child calls mq_notify (q, { SIGEV_SIGNAL }). */
-
- (void) pthread_barrier_wait (b3);
-
- if (mq_notify (q, NULL) != 0)
- {
- printf ("second mq_notify in thread (q, NULL) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should not trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been received. */
- /* Child calls mq_notify (q, { SIGEV_SIGNAL }). */
-
- (void) pthread_barrier_wait (b3);
-
- mqd_t q4 = mq_open (name, O_RDONLY);
- if (q4 == (mqd_t) -1)
- {
- printf ("mq_open in thread failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q4, NULL) != 0)
- {
- printf ("mq_notify in thread (q4, NULL) failed with: %m\n");
- result = 1;
- }
-
- if (mq_close (q4) != 0)
- {
- printf ("mq_close in thread failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should not trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been received. */
- /* Child calls mq_notify (q, { SIGEV_SIGNAL }). */
-
- (void) pthread_barrier_wait (b3);
-
- mqd_t q5 = mq_open (name, O_WRONLY);
- if (q5 == (mqd_t) -1)
- {
- printf ("mq_open O_WRONLY in thread failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q5, NULL) != 0)
- {
- printf ("mq_notify in thread (q5, NULL) failed with: %m\n");
- result = 1;
- }
-
- if (mq_close (q5) != 0)
- {
- printf ("mq_close in thread failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should not trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been received. */
-
- return (void *) (long) result;
-}
-
-static void
-do_child (const char *name, pthread_barrier_t *b2, pthread_barrier_t *b3,
- mqd_t q)
-{
- int result = 0;
-
- struct sigevent ev;
- memset (&ev, 0x55, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_ptr = &ev;
- if (mq_notify (q, &ev) == 0)
- {
- puts ("first mq_notify in child (q, { SIGEV_SIGNAL }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("first mq_notify in child (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent calls mqsend (q), which makes notification available. */
-
- (void) pthread_barrier_wait (b2);
-
- rtmin_cnt = 0;
-
- if (mq_notify (q, &ev) != 0)
- {
- printf ("second mq_notify in child (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- if (rtmin_cnt != 0)
- {
- puts ("SIGRTMIN signal in child caught too early");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent unsuccessfully attempts to mq_notify. */
- /* Parent calls mqsend (q), which makes notification available
- and triggers a signal in the child. */
- /* Parent successfully calls mq_notify SIGEV_SIGNAL. */
-
- (void) pthread_barrier_wait (b2);
-
- if (rtmin_cnt != 1)
- {
- puts ("SIGRTMIN signal in child did not arrive");
- result = 1;
- }
- else if (rtmin_pid != getppid ()
- || rtmin_uid != getuid ()
- || rtmin_code != SI_MESGQ
- || rtmin_sigval.sival_ptr != &ev)
- {
- printf ("unexpected siginfo_t fields: pid %u (%u), uid %u (%u), code %d (%d), si_ptr %p (%p)\n",
- rtmin_pid, getppid (), rtmin_uid, getuid (),
- rtmin_code, SI_MESGQ, rtmin_sigval.sival_ptr, &ev);
- result = 1;
- }
-
- result |= mqsend (q);
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent verifies caught SIGRTMIN. */
-
- mqd_t q2 = mq_open (name, O_RDWR);
- if (q2 == (mqd_t) -1)
- {
- printf ("mq_open in child failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent mq_open's another mqd_t for the same queue (q3). */
-
- memset (&ev, 0x11, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_ptr = &ev;
- if (mq_notify (q2, &ev) != 0)
- {
- printf ("mq_notify in child (q2, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent unsuccessfully attempts to mq_notify { SIGEV_NONE } on q. */
-
- (void) pthread_barrier_wait (b2);
-
- if (mq_close (q2) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent successfully calls mq_notify { SIGEV_NONE } on q3. */
-
- (void) pthread_barrier_wait (b2);
-
- memset (&ev, 0xbb, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_ptr = &b2;
- if (mq_notify (q, &ev) == 0)
- {
- puts ("third mq_notify in child (q, { SIGEV_SIGNAL }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("third mq_notify in child (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent calls mq_close on q3, which makes the queue available again for
- notification. */
-
- (void) pthread_barrier_wait (b2);
-
- memset (&ev, 0x13, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("mq_notify in child (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q, NULL) != 0)
- {
- printf ("mq_notify in child (q, NULL) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- struct thr_data thr_data = { .name = name, .b3 = b3, .q = q };
- pthread_t th;
- int ret = pthread_create (&th, NULL, thr, &thr_data);
- if (ret)
- {
- errno = ret;
- printf ("pthread_created failed with: %m\n");
- result = 1;
- }
-
- /* Wait till thr calls mq_receive on the empty queue q and blocks on it. */
- sleep (1);
-
- memset (&ev, 0x5f, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_int = 0xdeadbeef;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("fourth mq_notify in child (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Parent calls mqsend (q), which should wake up mqrecv (q)
- in the thread but no notification should be sent. */
-
- (void) pthread_barrier_wait (b3);
-
- if (rtmin_cnt != 1)
- {
- puts ("SIGRTMIN signal caught while thr was blocked on mq_receive");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread verifies SIGRTMIN has been received. */
- /* Thread calls mq_notify (q, { SIGEV_NONE }) to verify notification is now
- available for registration. */
- /* Thread calls mq_notify (q, NULL). */
-
- (void) pthread_barrier_wait (b3);
-
- memset (&ev, 0x6a, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_ptr = do_child;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("fifth mq_notify in child (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread calls mq_notify (q, NULL), which should unregister the above
- notification. */
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should not trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- if (rtmin_cnt != 2)
- {
- puts ("SIGRTMIN signal caught while notification has been disabled");
- result = 1;
- }
-
- memset (&ev, 0x7b, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_ptr = thr;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("sixth mq_notify in child (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread opens a new O_RDONLY mqd_t (q4). */
- /* Thread calls mq_notify (q4, NULL), which should unregister the above
- notification. */
- /* Thread calls mq_close (q4). */
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should not trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- if (rtmin_cnt != 2)
- {
- puts ("SIGRTMIN signal caught while notification has been disabled");
- result = 1;
- }
-
- memset (&ev, 0xe1, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_int = 127;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("seventh mq_notify in child (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread opens a new O_WRONLY mqd_t (q5). */
- /* Thread calls mq_notify (q5, NULL), which should unregister the above
- notification. */
- /* Thread calls mq_close (q5). */
-
- (void) pthread_barrier_wait (b3);
-
- /* Parent calls mqsend (q), which should not trigger notification. */
-
- (void) pthread_barrier_wait (b3);
-
- if (rtmin_cnt != 2)
- {
- puts ("SIGRTMIN signal caught while notification has been disabled");
- result = 1;
- }
-
- void *thr_ret;
- ret = pthread_join (th, &thr_ret);
- if (ret)
- {
- errno = ret;
- printf ("pthread_join failed: %m\n");
- result = 1;
- }
- else if (thr_ret)
- result = 1;
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- exit (result);
-}
-
-#define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- int result = 0;
-
- char tmpfname[] = "/tmp/tst-mqueue5-barrier.XXXXXX";
- int fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- size_t ps = sysconf (_SC_PAGESIZE);
- char data[ps];
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- void *mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- pthread_barrier_t *b2;
- b2 = (pthread_barrier_t *) (((uintptr_t) mem + __alignof (pthread_barrier_t))
- & ~(__alignof (pthread_barrier_t) - 1));
-
- pthread_barrier_t *b3;
- b3 = b2 + 1;
-
- pthread_barrierattr_t a;
- if (pthread_barrierattr_init (&a) != 0)
- {
- puts ("barrierattr_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("barrierattr_setpshared failed, could not test");
- return 0;
- }
-
- if (pthread_barrier_init (b2, &a, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_barrier_init (b3, &a, 3) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_barrierattr_destroy (&a) != 0)
- {
- puts ("barrierattr_destroy failed");
- return 1;
- }
-
- char name[sizeof "/tst-mqueue5-" + sizeof (pid_t) * 3];
- snprintf (name, sizeof (name), "/tst-mqueue5-%u", getpid ());
-
- struct mq_attr attr = { .mq_maxmsg = 1, .mq_msgsize = 1 };
- mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return result;
- }
- else
- add_temp_mq (name);
-
- struct sigevent ev;
- memset (&ev, 0xaa, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q, &ev) == 0)
- {
- puts ("second mq_notify (q, { SIGEV_NONE }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("second mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- result |= mqsend (q);
-
- if (mq_notify (q, &ev) != 0)
- {
- printf ("third mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- result |= mqrecv (q);
-
- if (mq_notify (q, NULL) != 0)
- {
- printf ("mq_notify (q, NULL) failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q, NULL) != 0)
- {
- /* Implementation-defined behaviour, so don't fail,
- just inform. */
- printf ("second mq_notify (q, NULL) failed with: %m\n");
- }
-
- struct sigaction sa = { .sa_sigaction = rtmin_handler,
- .sa_flags = SA_SIGINFO };
- sigemptyset (&sa.sa_mask);
- sigaction (SIGRTMIN, &sa, NULL);
-
- memset (&ev, 0x55, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_int = 26;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("mq_notify (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- ev.sigev_value.sival_ptr = &ev;
- if (mq_notify (q, &ev) == 0)
- {
- puts ("second mq_notify (q, { SIGEV_SIGNAL }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("second mq_notify (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- if (rtmin_cnt != 0)
- {
- puts ("SIGRTMIN signal caught too early");
- result = 1;
- }
-
- result |= mqsend (q);
-
- if (rtmin_cnt != 1)
- {
- puts ("SIGRTMIN signal did not arrive");
- result = 1;
- }
- else if (rtmin_pid != getpid ()
- || rtmin_uid != getuid ()
- || rtmin_code != SI_MESGQ
- || rtmin_sigval.sival_int != 26)
- {
- printf ("unexpected siginfo_t fields: pid %u (%u), uid %u (%u), code %d (%d), si_int %d (26)\n",
- rtmin_pid, getpid (), rtmin_uid, getuid (),
- rtmin_code, SI_MESGQ, rtmin_sigval.sival_int);
- result = 1;
- }
-
- ev.sigev_value.sival_int = 75;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("third mq_notify (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- result |= mqrecv (q);
-
- if (mq_notify (q, NULL) != 0)
- {
- printf ("mq_notify (q, NULL) failed with: %m\n");
- result = 1;
- }
-
- memset (&ev, 0x33, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("fourth mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- printf ("fork () failed: %m\n");
- mq_unlink (name);
- return 1;
- }
-
- if (pid == 0)
- do_child (name, b2, b3, q);
-
- /* Child unsuccessfully attempts to mq_notify. */
-
- (void) pthread_barrier_wait (b2);
-
- result |= mqsend (q);
-
- (void) pthread_barrier_wait (b2);
-
- /* Child successfully calls mq_notify SIGEV_SIGNAL now. */
-
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b2);
-
- memset (&ev, 0xbb, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_int = 15;
- if (mq_notify (q, &ev) == 0)
- {
- puts ("fourth mq_notify (q, { SIGEV_SIGNAL }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("fourth mq_notify (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- result |= mqsend (q);
-
- if (mq_notify (q, &ev) != 0)
- {
- printf ("fifth mq_notify (q, { SIGEV_SIGNAL }) failed with: %m\n");
- result = 1;
- }
-
- if (rtmin_cnt != 1)
- {
- puts ("SIGRTMIN signal caught too early");
- result = 1;
- }
-
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b2);
-
- /* Child verifies caught SIGRTMIN signal. */
- /* Child calls mq_send (q) which triggers SIGRTMIN signal here. */
-
- (void) pthread_barrier_wait (b2);
-
- /* Child mq_open's another mqd_t for the same queue (q2). */
-
- if (rtmin_cnt != 2)
- {
- puts ("SIGRTMIN signal did not arrive");
- result = 1;
- }
- else if (rtmin_pid != pid
- || rtmin_uid != getuid ()
- || rtmin_code != SI_MESGQ
- || rtmin_sigval.sival_int != 15)
- {
- printf ("unexpected siginfo_t fields: pid %u (%u), uid %u (%u), code %d (%d), si_int %d (15)\n",
- rtmin_pid, pid, rtmin_uid, getuid (),
- rtmin_code, SI_MESGQ, rtmin_sigval.sival_int);
- result = 1;
- }
-
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b2);
-
- /* Child successfully calls mq_notify { SIGEV_SIGNAL } on q2. */
-
- (void) pthread_barrier_wait (b2);
-
- memset (&ev, 0xbb, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (mq_notify (q, &ev) == 0)
- {
- puts ("fifth mq_notify (q, { SIGEV_NONE }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("fifth mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Child calls mq_close on q2, which makes the queue available again for
- notification. */
-
- mqd_t q3 = mq_open (name, O_RDWR);
- if (q3 == (mqd_t) -1)
- {
- printf ("mq_open q3 in parent failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- memset (&ev, 0x12, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (mq_notify (q3, &ev) != 0)
- {
- printf ("mq_notify (q3, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Child unsuccessfully attempts to mq_notify { SIGEV_SIGNAL } on q. */
-
- (void) pthread_barrier_wait (b2);
-
- if (mq_close (q3) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- (void) pthread_barrier_wait (b2);
-
- /* Child successfully calls mq_notify { SIGEV_NONE } on q. */
- /* Child successfully calls mq_notify NULL on q. */
-
- (void) pthread_barrier_wait (b2);
-
- /* Child creates new thread. */
- /* Thread blocks on mqrecv (q). */
- /* Child sleeps for 1sec so that thread has time to reach that point. */
- /* Child successfully calls mq_notify { SIGEV_SIGNAL } on q. */
-
- (void) pthread_barrier_wait (b2);
-
- result |= mqsend (q);
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been sent. */
-
- (void) pthread_barrier_wait (b3);
-
- result |= mqsend (q);
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread verifies SIGRTMIN has been caught. */
- /* Thread calls mq_notify (q, { SIGEV_NONE }) to verify notification is now
- available for registration. */
- /* Thread calls mq_notify (q, NULL). */
-
- (void) pthread_barrier_wait (b3);
-
- /* Child calls mq_notify (q, { SIGEV_SIGNAL }). */
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread calls mq_notify (q, NULL). */
-
- (void) pthread_barrier_wait (b3);
-
- result |= mqsend (q);
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been sent. */
- /* Child calls mq_notify (q, { SIGEV_SIGNAL }). */
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread opens a new O_RDONLY mqd_t (q4). */
- /* Thread calls mq_notify (q4, NULL). */
- /* Thread calls mq_close (q4). */
-
- (void) pthread_barrier_wait (b3);
-
- result |= mqsend (q);
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been sent. */
- /* Child calls mq_notify (q, { SIGEV_SIGNAL }). */
-
- (void) pthread_barrier_wait (b3);
-
- /* Thread opens a new O_WRONLY mqd_t (q5). */
- /* Thread calls mq_notify (q5, NULL). */
- /* Thread calls mq_close (q5). */
-
- (void) pthread_barrier_wait (b3);
-
- result |= mqsend (q);
- result |= mqrecv (q);
-
- (void) pthread_barrier_wait (b3);
-
- /* Child verifies SIGRTMIN has not been sent. */
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("waitpid failed");
- kill (pid, SIGKILL);
- result = 1;
- }
- else if (!WIFEXITED (status) || WEXITSTATUS (status))
- {
- printf ("child failed with status %d\n", status);
- result = 1;
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- if (mq_notify (q, NULL) == 0)
- {
- puts ("mq_notify on closed mqd_t unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_notify on closed mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- memset (&ev, 0x55, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (mq_notify (q, &ev) == 0)
- {
- puts ("mq_notify on closed mqd_t unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_notify on closed mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- return result;
-}
-#else
-# define TEST_FUNCTION 0
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue6.c b/test/nptl/tst-mqueue6.c
deleted file mode 100644
index 8d84c1929..000000000
--- a/test/nptl/tst-mqueue6.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/* Test mq_notify.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <mqueue.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/mman.h>
-#include <sys/time.h>
-#include <sys/wait.h>
-#include <time.h>
-#include <unistd.h>
-#include "tst-mqueue.h"
-
-#if _POSIX_THREADS
-# include <pthread.h>
-
-# define mqsend(q) (mqsend) (q, __LINE__)
-static int
-(mqsend) (mqd_t q, int line)
-{
- char c;
- if (mq_send (q, &c, 1, 1) != 0)
- {
- printf ("mq_send on line %d failed with: %m\n", line);
- return 1;
- }
- return 0;
-}
-
-# define mqrecv(q) (mqrecv) (q, __LINE__)
-static int
-(mqrecv) (mqd_t q, int line)
-{
- char c;
- ssize_t rets = TEMP_FAILURE_RETRY (mq_receive (q, &c, 1, NULL));
- if (rets != 1)
- {
- if (rets == -1)
- printf ("mq_receive on line %d failed with: %m\n", line);
- else
- printf ("mq_receive on line %d returned %zd != 1\n",
- line, rets);
- return 1;
- }
- return 0;
-}
-
-volatile int fct_cnt, fct_err;
-size_t fct_guardsize;
-
-static void
-fct (union sigval s)
-{
- mqd_t q = *(mqd_t *) s.sival_ptr;
-
- pthread_attr_t nattr;
- int ret = pthread_getattr_np (pthread_self (), &nattr);
- if (ret)
- {
- errno = ret;
- printf ("pthread_getattr_np failed: %m\n");
- fct_err = 1;
- }
- else
- {
- ret = pthread_attr_getguardsize (&nattr, &fct_guardsize);
- if (ret)
- {
- errno = ret;
- printf ("pthread_attr_getguardsize failed: %m\n");
- fct_err = 1;
- }
- if (pthread_attr_destroy (&nattr) != 0)
- {
- puts ("pthread_attr_destroy failed");
- fct_err = 1;
- }
- }
-
- ++fct_cnt;
- fct_err |= mqsend (q);
-}
-
-# define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- int result = 0;
-
- char name[sizeof "/tst-mqueue6-" + sizeof (pid_t) * 3];
- snprintf (name, sizeof (name), "/tst-mqueue6-%u", getpid ());
-
- struct mq_attr attr = { .mq_maxmsg = 1, .mq_msgsize = 1 };
- mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return result;
- }
- else
- add_temp_mq (name);
-
- pthread_attr_t nattr;
- if (pthread_attr_init (&nattr)
- || pthread_attr_setguardsize (&nattr, 0))
- {
- puts ("pthread_attr_t setup failed");
- result = 1;
- }
-
- fct_guardsize = 1;
-
- struct sigevent ev;
- memset (&ev, 0xaa, sizeof (ev));
- ev.sigev_notify = SIGEV_THREAD;
- ev.sigev_notify_function = fct;
- ev.sigev_notify_attributes = &nattr;
- ev.sigev_value.sival_ptr = &q;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("mq_notify (q, { SIGEV_THREAD }) failed with: %m\n");
- result = 1;
- }
-
- size_t ps = sysconf (_SC_PAGESIZE);
- if (pthread_attr_setguardsize (&nattr, 32 * ps))
- {
- puts ("pthread_attr_t setup failed");
- result = 1;
- }
-
- if (mq_notify (q, &ev) == 0)
- {
- puts ("second mq_notify (q, { SIGEV_NONE }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("second mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- if (fct_cnt != 0)
- {
- printf ("fct called too early (%d on %d)\n", fct_cnt, __LINE__);
- result = 1;
- }
-
- result |= mqsend (q);
-
- result |= mqrecv (q);
- result |= mqrecv (q);
-
- if (fct_cnt != 1)
- {
- printf ("fct not called (%d on %d)\n", fct_cnt, __LINE__);
- result = 1;
- }
- else if (fct_guardsize != 0)
- {
- printf ("fct_guardsize %zd != 0\n", fct_guardsize);
- result = 1;
- }
-
- if (mq_notify (q, &ev) != 0)
- {
- printf ("third mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q, NULL) != 0)
- {
- printf ("mq_notify (q, NULL) failed with: %m\n");
- result = 1;
- }
-
- memset (&ev, 0x11, sizeof (ev));
- ev.sigev_notify = SIGEV_THREAD;
- ev.sigev_notify_function = fct;
- ev.sigev_notify_attributes = &nattr;
- ev.sigev_value.sival_ptr = &q;
- if (mq_notify (q, &ev) != 0)
- {
- printf ("mq_notify (q, { SIGEV_THREAD }) failed with: %m\n");
- result = 1;
- }
-
- if (pthread_attr_setguardsize (&nattr, 0))
- {
- puts ("pthread_attr_t setup failed");
- result = 1;
- }
-
- if (mq_notify (q, &ev) == 0)
- {
- puts ("second mq_notify (q, { SIGEV_NONE }) unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBUSY)
- {
- printf ("second mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- if (fct_cnt != 1)
- {
- printf ("fct called too early (%d on %d)\n", fct_cnt, __LINE__);
- result = 1;
- }
-
- result |= mqsend (q);
-
- result |= mqrecv (q);
- result |= mqrecv (q);
-
- if (fct_cnt != 2)
- {
- printf ("fct not called (%d on %d)\n", fct_cnt, __LINE__);
- result = 1;
- }
- else if (fct_guardsize != 32 * ps)
- {
- printf ("fct_guardsize %zd != %zd\n", fct_guardsize, 32 * ps);
- result = 1;
- }
-
- if (mq_notify (q, &ev) != 0)
- {
- printf ("third mq_notify (q, { SIGEV_NONE }) failed with: %m\n");
- result = 1;
- }
-
- if (mq_notify (q, NULL) != 0)
- {
- printf ("mq_notify (q, NULL) failed with: %m\n");
- result = 1;
- }
-
- if (pthread_attr_destroy (&nattr) != 0)
- {
- puts ("pthread_attr_destroy failed");
- result = 1;
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed: %m\n");
- result = 1;
- }
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- memset (&ev, 0x55, sizeof (ev));
- ev.sigev_notify = SIGEV_THREAD;
- ev.sigev_notify_function = fct;
- ev.sigev_notify_attributes = NULL;
- ev.sigev_value.sival_int = 0;
- if (mq_notify (q, &ev) == 0)
- {
- puts ("mq_notify on closed mqd_t unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_notify on closed mqd_t did not fail with EBADF: %m\n");
- result = 1;
- }
-
- if (fct_err)
- result = 1;
- return result;
-}
-#else
-# define TEST_FUNCTION 0
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue7.c b/test/nptl/tst-mqueue7.c
deleted file mode 100644
index 1892f951a..000000000
--- a/test/nptl/tst-mqueue7.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Test all open message queues descriptors are closed during exec*.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <mqueue.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-#include <time.h>
-#include <unistd.h>
-
-#define OPT_AFTEREXEC 20000
-
-static mqd_t after_exec = (mqd_t) -1;
-
-#define CMDLINE_OPTIONS \
- "a:"
-
-#define CMDLINE_PROCESS \
- case 'a': \
- after_exec = (mqd_t) strtoul (optarg, NULL, 0); \
- break;
-
-static int
-do_after_exec (void)
-{
- int result = 0;
-
- struct mq_attr attr;
- if (mq_getattr (after_exec, &attr) == 0)
- {
- puts ("mq_getattr after exec unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EBADF)
- {
- printf ("mq_getattr after exec did not fail with EBADF: %m\n");
- result = 1;
- }
-
- return result;
-}
-
-static int
-do_test (int argc, char **argv)
-{
- if (after_exec != (mqd_t) -1)
- return do_after_exec ();
-
- char name[sizeof "/tst-mqueue7-" + sizeof (pid_t) * 3];
- snprintf (name, sizeof (name), "/tst-mqueue7-%u", getpid ());
-
- struct mq_attr attr = { .mq_maxmsg = 10, .mq_msgsize = 1 };
- mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_WRONLY, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return 0;
- }
- else if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed with: %m\n");
- return 1;
- }
-
- if (mq_getattr (q, &attr) != 0)
- {
- printf ("mq_getattr failed: %m\n");
- return 1;
- }
-
- char after_exec_arg[sizeof "-a=0x" + sizeof (long) * 3];
- snprintf (after_exec_arg, sizeof (after_exec_arg),
- "-a=0x%lx", (long) q);
-
- const char *newargv[argc + 2];
- for (int i = 1; i < argc; ++i)
- newargv[i - 1] = argv[i];
- newargv[argc - 1] = "-d";
- newargv[argc] = after_exec_arg;
- newargv[argc + 1] = NULL;
-
- /* Verify that exec* has the effect of mq_close (q). */
- execv (newargv[0], (char * const *) newargv);
- printf ("execv failed: %m\n");
- return 1;
-}
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue8.c b/test/nptl/tst-mqueue8.c
deleted file mode 100644
index b80e4e5c3..000000000
--- a/test/nptl/tst-mqueue8.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <mqueue.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#if _POSIX_THREADS
-# include <pthread.h>
-
-static pthread_barrier_t b;
-
-/* Cleanup handling test. */
-static int cl_called;
-
-static void
-cl (void *arg)
-{
- ++cl_called;
-}
-
-#define TF_MQ_RECEIVE 0L
-#define TF_MQ_TIMEDRECEIVE 1L
-#define TF_MQ_SEND 2L
-#define TF_MQ_TIMEDSEND 3L
-
-static const char *names[]
- = { "mq_receive", "mq_timedreceive", "mq_send", "mq_timedsend" };
-
-static mqd_t q;
-static struct timespec never;
-
-static void *
-tf (void *arg)
-{
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: barrier_wait failed");
- exit (1);
- }
-
- pthread_cleanup_push (cl, NULL);
-
- char c = ' ';
-
- switch ((long) arg)
- {
- case TF_MQ_SEND:
- TEMP_FAILURE_RETRY (mq_send (q, &c, 1, 1));
- break;
- case TF_MQ_TIMEDSEND:
- TEMP_FAILURE_RETRY (mq_timedsend (q, &c, 1, 1, &never));
- break;
- case TF_MQ_RECEIVE:
- TEMP_FAILURE_RETRY (mq_receive (q, &c, 1, NULL));
- break;
- case TF_MQ_TIMEDRECEIVE:
- TEMP_FAILURE_RETRY (mq_timedreceive (q, &c, 1, NULL, &never));
- break;
- }
-
- pthread_cleanup_pop (0);
-
- printf ("tf: %s returned\n", names[(long) arg]);
-
- exit (1);
-}
-
-#define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- char name[sizeof "/tst-mqueue8-" + sizeof (pid_t) * 3];
- snprintf (name, sizeof (name), "/tst-mqueue8-%u", getpid ());
-
- struct mq_attr attr = { .mq_maxmsg = 1, .mq_msgsize = 1 };
- q = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return 0;
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed with: %m\n");
- return 1;
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (clock_gettime (CLOCK_REALTIME, &never) == 0)
- never.tv_sec += 100;
- else
- {
- never.tv_sec = time (NULL) + 100;
- never.tv_nsec = 0;
- }
-
- int result = 0;
- for (long l = TF_MQ_RECEIVE; l <= TF_MQ_TIMEDSEND; ++l)
- {
- cl_called = 0;
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, (void *) l) != 0)
- {
- printf ("1st %s create failed\n", names[l]);
- result = 1;
- continue;
- }
-
- int r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- result = 1;
- continue;
- }
-
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 100000000 };
- while (nanosleep (&ts, &ts) != 0)
- continue;
-
- printf ("going to cancel %s in-time\n", names[l]);
- if (pthread_cancel (th) != 0)
- {
- printf ("1st cancel of %s failed\n", names[l]);
- result = 1;
- continue;
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- printf ("1st join of %s failed\n", names[l]);
- result = 1;
- continue;
- }
- if (status != PTHREAD_CANCELED)
- {
- printf ("1st %s thread not canceled\n", names[l]);
- result = 1;
- continue;
- }
-
- if (cl_called == 0)
- {
- printf ("%s cleanup handler not called\n", names[l]);
- result = 1;
- continue;
- }
- if (cl_called > 1)
- {
- printf ("%s cleanup handler called more than once\n", names[l]);
- result = 1;
- continue;
- }
-
- printf ("in-time %s cancellation succeeded\n", names[l]);
-
- cl_called = 0;
-
- if (pthread_create (&th, NULL, tf, (void *) l) != 0)
- {
- printf ("2nd %s create failed\n", names[l]);
- result = 1;
- continue;
- }
-
- printf ("going to cancel %s early\n", names[l]);
- if (pthread_cancel (th) != 0)
- {
- printf ("2nd cancel of %s failed\n", names[l]);
- result = 1;
- continue;
- }
-
- r = pthread_barrier_wait (&b);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- result = 1;
- continue;
- }
-
- if (pthread_join (th, &status) != 0)
- {
- printf ("2nd join of %s failed\n", names[l]);
- result = 1;
- continue;
- }
- if (status != PTHREAD_CANCELED)
- {
- printf ("2nd %s thread not canceled\n", names[l]);
- result = 1;
- continue;
- }
-
- if (cl_called == 0)
- {
- printf ("%s cleanup handler not called\n", names[l]);
- result = 1;
- continue;
- }
- if (cl_called > 1)
- {
- printf ("%s cleanup handler called more than once\n", names[l]);
- result = 1;
- continue;
- }
-
- printf ("early %s cancellation succeeded\n", names[l]);
-
- if (l == TF_MQ_TIMEDRECEIVE)
- {
- /* mq_receive and mq_timedreceive are tested on empty mq.
- For mq_send and mq_timedsend we need to make it full.
- If this fails, there is no point in doing further testing. */
- char c = ' ';
- if (mq_send (q, &c, 1, 1) != 0)
- {
- printf ("mq_send failed: %m\n");
- result = 1;
- break;
- }
- }
- }
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close failed: %m\n");
- result = 1;
- }
-
- return result;
-}
-#else
-# define TEST_FUNCTION 0
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mqueue9.c b/test/nptl/tst-mqueue9.c
deleted file mode 100644
index 7098b847e..000000000
--- a/test/nptl/tst-mqueue9.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <mqueue.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "tst-mqueue.h"
-
-#define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- if (geteuid () != 0)
- {
- puts ("this test requires root");
- return 0;
- }
-
- char name[sizeof "/tst-mqueue9-" + sizeof (pid_t) * 3];
- snprintf (name, sizeof (name), "/tst-mqueue9-%u", getpid ());
-
- struct mq_attr attr = { .mq_maxmsg = 1, .mq_msgsize = 1 };
- mqd_t q = mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr);
-
- if (q == (mqd_t) -1)
- {
- printf ("mq_open failed with: %m\n");
- return 0;
- }
- else
- add_temp_mq (name);
-
- if (seteuid (1) != 0)
- {
- printf ("failed to seteuid (1): %m\n");
- mq_unlink (name);
- return 0;
- }
-
- int result = 0;
- if (mq_unlink (name) == 0)
- {
- puts ("mq_unlink unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EACCES)
- {
- printf ("mq_unlink did not fail with EACCES: %m\n");
- result = 1;;
- }
-
- if (seteuid (0) != 0)
- {
- printf ("failed to seteuid (0): %m\n");
- result = 1;
- }
-
- if (mq_unlink (name) != 0)
- {
- printf ("mq_unlink failed with: %m\n");
- result = 1;
- }
-
- if (mq_close (q) != 0)
- {
- printf ("mq_close failed with: %m\n");
- result = 1;
- }
-
- return result;
-}
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex1.c b/test/nptl/tst-mutex1.c
deleted file mode 100644
index 0f3a98c76..000000000
--- a/test/nptl/tst-mutex1.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
- pthread_mutex_t m;
-
- if (pthread_mutex_init (&m, NULL) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("mutex_unlock failed");
- return 1;
- }
-
- if (pthread_mutex_destroy (&m) != 0)
- {
- puts ("mutex_destroy failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex2.c b/test/nptl/tst-mutex2.c
deleted file mode 100644
index 707afe9fc..000000000
--- a/test/nptl/tst-mutex2.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_mutex_t m;
-static pthread_barrier_t b;
-
-
-static void *
-tf (void *arg)
-{
- int e = pthread_mutex_unlock (&m);
- if (e == 0)
- {
- puts ("child: 1st mutex_unlock succeeded");
- exit (1);
- }
- else if (e != EPERM)
- {
- puts ("child: 1st mutex_unlock error != EPERM");
- exit (1);
- }
-
- e = pthread_mutex_trylock (&m);
- if (e == 0)
- {
- puts ("child: 1st trylock suceeded");
- exit (1);
- }
- if (e != EBUSY)
- {
- puts ("child: 1st trylock didn't return EBUSY");
- exit (1);
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: 1st barrier_wait failed");
- exit (1);
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("child: 2nd barrier_wait failed");
- exit (1);
- }
-
- e = pthread_mutex_unlock (&m);
- if (e == 0)
- {
- puts ("child: 2nd mutex_unlock succeeded");
- exit (1);
- }
- else if (e != EPERM)
- {
- puts ("child: 2nd mutex_unlock error != EPERM");
- exit (1);
- }
-
- if (pthread_mutex_trylock (&m) != 0)
- {
- puts ("child: 2nd trylock failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("child: 3rd mutex_unlock failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_mutexattr_t a;
- int e;
-
- if (pthread_mutexattr_init (&a) != 0)
- {
- puts ("mutexattr_init failed");
- exit (1);
- }
-
- if (pthread_mutexattr_settype (&a, PTHREAD_MUTEX_ERRORCHECK) != 0)
- {
- puts ("mutexattr_settype failed");
- exit (1);
- }
-
- if (pthread_mutex_init (&m, &a) != 0)
- {
- puts ("mutex_init failed");
- exit (1);
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if ((e = pthread_mutex_unlock (&m)) == 0)
- {
- puts ("1st mutex_unlock succeeded");
- exit (1);
- }
- else if (e != EPERM)
- {
- puts ("1st mutex_unlock error != EPERM");
- exit (1);
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- exit (1);
- }
-
- if ((e = pthread_mutex_lock (&m)) == 0)
- {
- puts ("2nd mutex_lock succeeded");
- exit (1);
- }
- else if (e != EDEADLK)
- {
- puts ("2nd mutex_lock error != EDEADLK");
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- exit (1);
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("2nd mutex_unlock failed");
- exit (1);
- }
-
- if ((e = pthread_mutex_unlock (&m)) == 0)
- {
- puts ("3rd mutex_unlock succeeded");
- exit (1);
- }
- else if (e != EPERM)
- {
- puts ("3rd mutex_unlock error != EPERM");
- exit (1);
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("2nd barrier_wait failed");
- exit (1);
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- if (pthread_mutex_destroy (&m) != 0)
- {
- puts ("mutex_destroy failed");
- exit (1);
- }
-
- if (pthread_barrier_destroy (&b) != 0)
- {
- puts ("barrier_destroy failed");
- exit (1);
- }
-
- if (pthread_mutexattr_destroy (&a) != 0)
- {
- puts ("mutexattr_destroy failed");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex3.c b/test/nptl/tst-mutex3.c
deleted file mode 100644
index 5e582858b..000000000
--- a/test/nptl/tst-mutex3.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_mutex_t m;
-static pthread_barrier_t b;
-
-
-static void *
-tf (void *arg)
-{
- int e = pthread_mutex_unlock (&m);
- if (e == 0)
- {
- puts ("1st mutex_unlock in child succeeded");
- exit (1);
- }
- if (e != EPERM)
- {
- puts ("1st mutex_unlock in child didn't return EPERM");
- exit (1);
- }
-
- e = pthread_mutex_trylock (&m);
- if (e == 0)
- {
- puts ("mutex_trylock in second thread succeeded");
- exit (1);
- }
- if (e != EBUSY)
- {
- puts ("mutex_trylock returned wrong value");
- exit (1);
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- exit (1);
- }
-
- e = pthread_mutex_unlock (&m);
- if (e == 0)
- {
- puts ("2nd mutex_unlock in child succeeded");
- exit (1);
- }
- if (e != EPERM)
- {
- puts ("2nd mutex_unlock in child didn't return EPERM");
- exit (1);
- }
-
- if (pthread_mutex_trylock (&m) != 0)
- {
- puts ("2nd mutex_trylock in second thread failed");
- exit (1);
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("3rd mutex_unlock in second thread failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_mutexattr_t a;
-
- if (pthread_mutexattr_init (&a) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_settype (&a, PTHREAD_MUTEX_RECURSIVE) != 0)
- {
- puts ("mutexattr_settype failed");
- return 1;
- }
-
- if (pthread_mutex_init (&m, &a) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("2nd mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutex_trylock (&m) != 0)
- {
- puts ("1st trylock failed");
- return 1;
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("mutex_unlock failed");
- return 1;
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("2nd mutex_unlock failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("3rd mutex_unlock failed");
- return 1;
- }
-
- e = pthread_mutex_unlock (&m);
- if (e == 0)
- {
- puts ("4th mutex_unlock succeeded");
- return 1;
- }
- if (e != EPERM)
- {
- puts ("4th mutex_unlock didn't return EPERM");
- return 1;
- }
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (pthread_barrier_destroy (&b) != 0)
- {
- puts ("barrier_destroy failed");
- return 1;
- }
-
- if (pthread_mutex_destroy (&m) != 0)
- {
- puts ("mutex_destroy failed");
- return 1;
- }
-
- if (pthread_mutexattr_destroy (&a) != 0)
- {
- puts ("mutexattr_destroy failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex4.c b/test/nptl/tst-mutex4.c
deleted file mode 100644
index f66abc052..000000000
--- a/test/nptl/tst-mutex4.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-mutex4.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_mutex_t *m;
- pthread_mutexattr_t a;
- pid_t pid;
- char *p;
- int err;
- int s;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- m = (pthread_mutex_t *) (((uintptr_t) mem + __alignof (pthread_mutex_t))
- & ~(__alignof (pthread_mutex_t) - 1));
- p = (char *) (m + 1);
-
- if (pthread_mutexattr_init (&a) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_getpshared (&a, &s) != 0)
- {
- puts ("1st mutexattr_getpshared failed");
- return 1;
- }
-
- if (s != PTHREAD_PROCESS_PRIVATE)
- {
- puts ("default pshared value wrong");
- return 1;
- }
-
- if (pthread_mutexattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("mutexattr_setpshared failed");
- return 1;
- }
-
- if (pthread_mutexattr_getpshared (&a, &s) != 0)
- {
- puts ("2nd mutexattr_getpshared failed");
- return 1;
- }
-
- if (s != PTHREAD_PROCESS_SHARED)
- {
- puts ("pshared value after setpshared call wrong");
- return 1;
- }
-
- if (pthread_mutex_init (m, &a) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_mutex_lock (m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutexattr_destroy (&a) != 0)
- {
- puts ("mutexattr_destroy failed");
- return 1;
- }
-
- err = pthread_mutex_trylock (m);
- if (err == 0)
- {
- puts ("mutex_trylock succeeded");
- return 1;
- }
- else if (err != EBUSY)
- {
- puts ("mutex_trylock didn't return EBUSY");
- return 1;
- }
-
- *p = 0;
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- else if (pid == 0)
- {
- /* Play some lock ping-pong. It's our turn to unlock first. */
- if ((*p)++ != 0)
- {
- puts ("child: *p != 0");
- return 1;
- }
-
- if (pthread_mutex_unlock (m) != 0)
- {
- puts ("child: 1st mutex_unlock failed");
- return 1;
- }
-
- puts ("child done");
- }
- else
- {
- if (pthread_mutex_lock (m) != 0)
- {
- puts ("parent: 2nd mutex_lock failed");
- return 1;
- }
-
- if (*p != 1)
- {
- puts ("*p != 1");
- return 1;
- }
-
- puts ("parent done");
- }
-
- return 0;
-}
-
-#define TIMEOUT 4
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex5.c b/test/nptl/tst-mutex5.c
deleted file mode 100644
index 85dddef7e..000000000
--- a/test/nptl/tst-mutex5.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-#ifndef TYPE
-# define TYPE PTHREAD_MUTEX_NORMAL
-#endif
-
-
-static int
-do_test (void)
-{
- pthread_mutex_t m;
- struct timespec ts;
- struct timeval tv;
- struct timeval tv2;
- int err;
- pthread_mutexattr_t a;
-
- if (pthread_mutexattr_init (&a) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_settype (&a, TYPE) != 0)
- {
- puts ("mutexattr_settype failed");
- return 1;
- }
-
- if (pthread_mutex_init (&m, &a) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_destroy (&a) != 0)
- {
- puts ("mutexattr_destroy failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutex_trylock (&m) == 0)
- {
- puts ("mutex_trylock succeeded");
- return 1;
- }
-
- gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ts.tv_sec += 2; /* Wait 2 seconds. */
-
- err = pthread_mutex_timedlock (&m, &ts);
- if (err == 0)
- {
- puts ("timedlock succeeded");
- return 1;
- }
- else if (err != ETIMEDOUT)
- {
- printf ("timedlock error != ETIMEDOUT: %d\n", err);
- return 1;
- }
- else
- {
- int clk_tck = sysconf (_SC_CLK_TCK);
-
- gettimeofday (&tv2, NULL);
-
- tv2.tv_sec -= tv.tv_sec;
- tv2.tv_usec -= tv.tv_usec;
- if (tv2.tv_usec < 0)
- {
- tv2.tv_usec += 1000000;
- tv2.tv_sec -= 1;
- }
-
- /* Be a bit tolerant, add one CLK_TCK. */
- tv2.tv_usec += 1000000 / clk_tck;
- if (tv2.tv_usec >= 1000000)
- {
- tv2.tv_usec -= 1000000;
- ++tv2.tv_sec;
- }
-
- if (tv2.tv_sec < 2)
- {
- printf ("premature timeout: %ld.%06ld difference\n",
- tv2.tv_sec, tv2.tv_usec);
- return 1;
- }
- }
-
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ts.tv_sec += 2; /* Wait 2 seconds. */
- /* The following makes the ts value invalid. */
- ts.tv_nsec += 1000000000;
-
- err = pthread_mutex_timedlock (&m, &ts);
- if (err == 0)
- {
- puts ("2nd timedlock succeeded");
- return 1;
- }
- else if (err != EINVAL)
- {
- printf ("2nd timedlock error != EINVAL: %d\n", err);
- return 1;
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("mutex_unlock failed");
- return 1;
- }
-
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ts.tv_sec += 2; /* Wait 2 seconds. */
- if (pthread_mutex_timedlock (&m, &ts) != 0)
- {
- puts ("3rd timedlock failed");
- }
-
- (void) gettimeofday (&tv2, NULL);
-
- /* Check that timedlock didn't delay. We use a limit of 0.1 secs. */
- timersub (&tv2, &tv, &tv2);
- if (tv2.tv_sec > 0 || tv2.tv_usec > 100000)
- {
- puts ("3rd timedlock didn't return right away");
- return 1;
- }
-
- if (pthread_mutex_unlock (&m) != 0)
- {
- puts ("final mutex_unlock failed");
- return 1;
- }
-
- if (pthread_mutex_destroy (&m) != 0)
- {
- puts ("mutex_destroy failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TIMEOUT 4
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex5a.c b/test/nptl/tst-mutex5a.c
deleted file mode 100644
index f91eec0d7..000000000
--- a/test/nptl/tst-mutex5a.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define TYPE PTHREAD_MUTEX_ADAPTIVE_NP
-#include "tst-mutex5.c"
diff --git a/test/nptl/tst-mutex6.c b/test/nptl/tst-mutex6.c
deleted file mode 100644
index 0dcfc7725..000000000
--- a/test/nptl/tst-mutex6.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int
-do_test (void)
-{
- pthread_mutex_t m;
-
- if (pthread_mutex_init (&m, NULL) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("1st mutex_lock failed");
- return 1;
- }
-
- /* Set an alarm for 1 second. The wrapper will expect this. */
- alarm (1);
-
- /* This call should never return. */
- pthread_mutex_lock (&m);
-
- puts ("2nd mutex_lock returned");
- return 1;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex7.c b/test/nptl/tst-mutex7.c
deleted file mode 100644
index 29a1423fd..000000000
--- a/test/nptl/tst-mutex7.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (C) 2002, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <time.h>
-
-
-#ifndef INIT
-# define INIT PTHREAD_MUTEX_INITIALIZER
-#endif
-
-
-static pthread_mutex_t lock = INIT;
-
-
-#define ROUNDS 1000
-#define N 100
-
-
-static void *
-tf (void *arg)
-{
- int nr = (long int) arg;
- int cnt;
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 11000 };
-
- for (cnt = 0; cnt < ROUNDS; ++cnt)
- {
- if (pthread_mutex_lock (&lock) != 0)
- {
- printf ("thread %d: failed to get the lock\n", nr);
- return (void *) 1l;
- }
-
- if (pthread_mutex_unlock (&lock) != 0)
- {
- printf ("thread %d: failed to release the lock\n", nr);
- return (void *) 1l;
- }
-
- nanosleep (&ts, NULL);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_attr_t at;
- pthread_t th[N];
- int cnt;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&lock) != 0)
- {
- puts ("locking in parent failed");
- return 1;
- }
-
- for (cnt = 0; cnt < N; ++cnt)
- if (pthread_create (&th[cnt], &at, tf, (void *) (long int) cnt) != 0)
- {
- printf ("creating thread %d failed\n", cnt);
- return 1;
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- if (pthread_mutex_unlock (&lock) != 0)
- {
- puts ("unlocking in parent failed");
- return 1;
- }
-
- for (cnt = 0; cnt < N; ++cnt)
- if (pthread_join (th[cnt], NULL) != 0)
- {
- printf ("joining thread %d failed\n", cnt);
- return 1;
- }
-
- return 0;
-}
-
-#define TIMEOUT 60
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex7a.c b/test/nptl/tst-mutex7a.c
deleted file mode 100644
index f08799ae7..000000000
--- a/test/nptl/tst-mutex7a.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define INIT PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
-#include "tst-mutex7.c"
diff --git a/test/nptl/tst-mutex8.c b/test/nptl/tst-mutex8.c
deleted file mode 100644
index a949be340..000000000
--- a/test/nptl/tst-mutex8.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This test checks behavior not required by POSIX. */
-#include <errno.h>
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_mutex_t *m;
-static pthread_barrier_t b;
-static pthread_cond_t c;
-static bool done;
-
-
-static void
-cl (void *arg)
-{
- if (pthread_mutex_unlock (m) != 0)
- {
- puts ("cl: mutex_unlocked failed");
- exit (1);
- }
-}
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_mutex_lock (m) != 0)
- {
- puts ("tf: mutex_lock failed");
- return (void *) 1l;
- }
-
- int e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return (void *) 1l;
- }
-
- if (arg == NULL)
- do
- if (pthread_cond_wait (&c, m) != 0)
- {
- puts ("tf: cond_wait failed");
- return (void *) 1l;
- }
- while (! done);
- else
- do
- {
- pthread_cleanup_push (cl, NULL);
-
- if (pthread_cond_wait (&c, m) != 0)
- {
- puts ("tf: cond_wait failed");
- return (void *) 1l;
- }
-
- pthread_cleanup_pop (0);
- }
- while (! done);
-
- if (pthread_mutex_unlock (m) != 0)
- {
- puts ("tf: mutex_unlock failed");
- return (void *) 1l;
- }
-
- return NULL;
-}
-
-
-static int
-check_type (const char *mas, pthread_mutexattr_t *ma)
-{
- if (pthread_mutex_init (m, ma) != 0)
- {
- printf ("1st mutex_init failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_mutex_destroy (m) != 0)
- {
- printf ("immediate mutex_destroy failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_mutex_init (m, ma) != 0)
- {
- printf ("2nd mutex_init failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_mutex_lock (m) != 0)
- {
- printf ("1st mutex_lock failed for %s\n", mas);
- return 1;
- }
-
- int e = pthread_mutex_destroy (m);
- if (e == 0)
- {
- printf ("mutex_destroy of self-locked mutex succeeded for %s\n", mas);
- return 1;
- }
- if (e != EBUSY)
- {
- printf ("mutex_destroy of self-locked mutex did not return EBUSY %s\n",
- mas);
- return 1;
- }
-
- if (pthread_mutex_unlock (m) != 0)
- {
- printf ("1st mutex_unlock failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_mutex_trylock (m) != 0)
- {
- printf ("mutex_trylock failed for %s\n", mas);
- return 1;
- }
-
- e = pthread_mutex_destroy (m);
- if (e == 0)
- {
- printf ("mutex_destroy of self-trylocked mutex succeeded for %s\n", mas);
- return 1;
- }
- if (e != EBUSY)
- {
- printf ("\
-mutex_destroy of self-trylocked mutex did not return EBUSY %s\n",
- mas);
- return 1;
- }
-
- if (pthread_mutex_unlock (m) != 0)
- {
- printf ("2nd mutex_unlock failed for %s\n", mas);
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("1st create failed");
- return 1;
- }
- done = false;
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("1st barrier_wait failed");
- return 1;
- }
-
- if (pthread_mutex_lock (m) != 0)
- {
- printf ("2nd mutex_lock failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_mutex_unlock (m) != 0)
- {
- printf ("3rd mutex_unlock failed for %s\n", mas);
- return 1;
- }
-
- e = pthread_mutex_destroy (m);
- if (e == 0)
- {
- printf ("mutex_destroy of condvar-used mutex succeeded for %s\n", mas);
- return 1;
- }
- if (e != EBUSY)
- {
- printf ("\
-mutex_destroy of condvar-used mutex did not return EBUSY for %s\n", mas);
- return 1;
- }
-
- done = true;
- if (pthread_cond_signal (&c) != 0)
- {
- puts ("cond_signal failed");
- return 1;
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- return 1;
- }
- if (r != NULL)
- {
- puts ("thread didn't return NULL");
- return 1;
- }
-
- if (pthread_mutex_destroy (m) != 0)
- {
- printf ("mutex_destroy after condvar-use failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_mutex_init (m, ma) != 0)
- {
- printf ("3rd mutex_init failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_create (&th, NULL, tf, (void *) 1) != 0)
- {
- puts ("2nd create failed");
- return 1;
- }
- done = false;
-
- e = pthread_barrier_wait (&b);
- if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("2nd barrier_wait failed");
- return 1;
- }
-
- if (pthread_mutex_lock (m) != 0)
- {
- printf ("3rd mutex_lock failed for %s\n", mas);
- return 1;
- }
-
- if (pthread_mutex_unlock (m) != 0)
- {
- printf ("4th mutex_unlock failed for %s\n", mas);
- return 1;
- }
-
- e = pthread_mutex_destroy (m);
- if (e == 0)
- {
- printf ("2nd mutex_destroy of condvar-used mutex succeeded for %s\n",
- mas);
- return 1;
- }
- if (e != EBUSY)
- {
- printf ("\
-2nd mutex_destroy of condvar-used mutex did not return EBUSY for %s\n",
- mas);
- return 1;
- }
-
- if (pthread_cancel (th) != 0)
- {
- puts ("cond_cancel failed");
- return 1;
- }
-
- if (pthread_join (th, &r) != 0)
- {
- puts ("join failed");
- return 1;
- }
- if (r != PTHREAD_CANCELED)
- {
- puts ("thread not canceled");
- return 1;
- }
-
- if (pthread_mutex_destroy (m) != 0)
- {
- printf ("mutex_destroy after condvar-canceled failed for %s\n", mas);
- return 1;
- }
-
- return 0;
-}
-
-
-static int
-do_test (void)
-{
- pthread_mutex_t mm;
- m = &mm;
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_cond_init (&c, NULL) != 0)
- {
- puts ("cond_init failed");
- return 1;
- }
-
- puts ("check normal mutex");
- int res = check_type ("normal", NULL);
-
- pthread_mutexattr_t ma;
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("1st mutexattr_init failed");
- return 1;
- }
- if (pthread_mutexattr_settype (&ma, PTHREAD_MUTEX_RECURSIVE) != 0)
- {
- puts ("1st mutexattr_settype failed");
- return 1;
- }
- puts ("check recursive mutex");
- res |= check_type ("recursive", &ma);
- if (pthread_mutexattr_destroy (&ma) != 0)
- {
- puts ("1st mutexattr_destroy failed");
- return 1;
- }
-
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("2nd mutexattr_init failed");
- return 1;
- }
- if (pthread_mutexattr_settype (&ma, PTHREAD_MUTEX_ERRORCHECK) != 0)
- {
- puts ("2nd mutexattr_settype failed");
- return 1;
- }
- puts ("check error-checking mutex");
- res |= check_type ("error-checking", &ma);
- if (pthread_mutexattr_destroy (&ma) != 0)
- {
- puts ("2nd mutexattr_destroy failed");
- return 1;
- }
-
- return res;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-mutex9.c b/test/nptl/tst-mutex9.c
deleted file mode 100644
index a4bb3aaaf..000000000
--- a/test/nptl/tst-mutex9.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-int gettimeofday(struct timeval *tv, struct timezone *tz);
-
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-mutex9.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_mutex_t *m;
- pthread_mutexattr_t a;
- pid_t pid;
- char *p;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- m = (pthread_mutex_t *) (((uintptr_t) mem + __alignof (pthread_mutex_t))
- & ~(__alignof (pthread_mutex_t) - 1));
- p = (char *) (m + 1);
-
- if (pthread_mutexattr_init (&a) != 0)
- {
- puts ("mutexattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("mutexattr_setpshared failed");
- return 1;
- }
-
- if (pthread_mutexattr_settype (&a, PTHREAD_MUTEX_RECURSIVE) != 0)
- {
- puts ("mutexattr_settype failed");
- return 1;
- }
-
- if (pthread_mutex_init (m, &a) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- if (pthread_mutex_lock (m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- if (pthread_mutexattr_destroy (&a) != 0)
- {
- puts ("mutexattr_destroy failed");
- return 1;
- }
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- else if (pid == 0)
- {
- if (pthread_mutex_trylock (m) == 0)
- {
- puts ("child: mutex_trylock succeeded");
- exit (1);
- }
-
- if (pthread_mutex_unlock (m) == 0)
- {
- puts ("child: mutex_unlock succeeded");
- exit (1);
- }
-
- struct timeval tv;
- gettimeofday (&tv, NULL);
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_nsec += 500000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ++ts.tv_sec;
- ts.tv_nsec -= 1000000000;
- }
-
- int e = pthread_mutex_timedlock (m, &ts);
- if (e == 0)
- {
- puts ("child: mutex_timedlock succeeded");
- exit (1);
- }
- if (e != ETIMEDOUT)
- {
- puts ("child: mutex_timedlock didn't time out");
- exit (1);
- }
-
- alarm (1);
-
- pthread_mutex_lock (m);
-
- puts ("child: mutex_lock returned");
-
- exit (0);
- }
-
- sleep (2);
-
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("waitpid failed");
- return 1;
- }
- if (! WIFSIGNALED (status))
- {
- puts ("child not killed by signal");
- return 1;
- }
- if (WTERMSIG (status) != SIGALRM)
- {
- puts ("child not killed by SIGALRM");
- return 1;
- }
-
- return 0;
-}
-
-#define TIMEOUT 3
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-oddstacklimit.c b/test/nptl/tst-oddstacklimit.c
deleted file mode 100644
index 9fbef1889..000000000
--- a/test/nptl/tst-oddstacklimit.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-basic1.c"
diff --git a/test/nptl/tst-once1.c b/test/nptl/tst-once1.c
deleted file mode 100644
index 308a45586..000000000
--- a/test/nptl/tst-once1.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-
-
-static pthread_once_t once = PTHREAD_ONCE_INIT;
-
-static int global;
-
-static void
-once_handler (void)
-{
- ++global;
-}
-
-
-static int
-do_test (void)
-{
- pthread_once (&once, once_handler);
- pthread_once (&once, once_handler);
-
- if (global != 1)
- {
- printf ("global = %d, expected 1\n", global);
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-once2.c b/test/nptl/tst-once2.c
deleted file mode 100644
index 6e2f3db1f..000000000
--- a/test/nptl/tst-once2.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (C) 2002, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-
-#define N 100
-
-static pthread_once_t once = PTHREAD_ONCE_INIT;
-
-static int global;
-
-static void
-once_handler (void)
-{
- struct timespec ts;
-
- ++global;
-
- ts.tv_sec = 2;
- ts.tv_nsec = 0;
- nanosleep (&ts, NULL);
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_once (&once, once_handler);
-
- if (global != 1)
- {
- printf ("thread %ld: global == %d\n", (long int) arg, global);
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_attr_t at;
- pthread_t th[N];
- int cnt;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setstacksize (&at, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- for (cnt = 0; cnt < N; ++cnt)
- if (pthread_create (&th[cnt], &at, tf, (void *) (long int) cnt) != 0)
- {
- printf ("creation of thread %d failed\n", cnt);
- return 1;
- }
-
- if (pthread_attr_destroy (&at) != 0)
- {
- puts ("attr_destroy failed");
- return 1;
- }
-
- for (cnt = 0; cnt < N; ++cnt)
- if (pthread_join (th[cnt], NULL) != 0)
- {
- printf ("join of thread %d failed\n", cnt);
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 4
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-once3.c b/test/nptl/tst-once3.c
deleted file mode 100644
index c869ca890..000000000
--- a/test/nptl/tst-once3.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-
-#define N 100
-
-static pthread_once_t once = PTHREAD_ONCE_INIT;
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-
-static pthread_barrier_t bar;
-
-static int global;
-static int cl_called;
-
-static void
-once_handler1 (void)
-{
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("once_handler1: mutex_lock failed");
- exit (1);
- }
- puts ("once_handler1: locked");
-
- int r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("once_handler1: barrier_wait failed");
- exit (1);
- }
-
- pthread_cond_wait (&cond, &mut);
-
- /* We should never get here. */
- exit (42);
-}
-
-static void
-once_handler2 (void)
-{
- global = 1;
-}
-
-
-static void
-cl (void *arg)
-{
- cl_called = 1;
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_cleanup_push (cl, NULL)
-
- pthread_once (&once, once_handler1);
-
- pthread_cleanup_pop (0);
-
- /* We should never get here. */
- puts ("pthread_once in tf returned");
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("first create failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
- /* We unlock the mutex so that we catch the case where the pthread_cond_wait
- call incorrectly resumes and tries to get the mutex. */
- if (pthread_mutex_unlock (&mut) != 0)
- {
- puts ("mutex_unlock failed");
- return 1;
- }
-
- /* Cancel the thread. */
- puts ("going to cancel");
- if (pthread_cancel (th) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
-
- void *result;
- pthread_join (th, &result);
- if (result != PTHREAD_CANCELED)
- {
- puts ("join didn't return PTHREAD_CANCELED");
- return 1;
- }
-
- if (cl_called != 1)
- {
- puts ("cleanup handler not called");
- return 1;
- }
-
- pthread_once (&once, once_handler2);
-
- if (global != 1)
- {
- puts ("global still 0");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 4
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-once4.c b/test/nptl/tst-once4.c
deleted file mode 100644
index a80b83099..000000000
--- a/test/nptl/tst-once4.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-
-
-static pthread_once_t once = PTHREAD_ONCE_INIT;
-
-static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-static pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
-
-static pthread_barrier_t bar;
-
-static int global;
-static int cl_called;
-
-static void
-once_handler1 (void)
-{
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("once_handler1: mutex_lock failed");
- exit (1);
- }
-
- int r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("once_handler1: barrier_wait failed");
- exit (1);
- }
-
- pthread_cond_wait (&cond, &mut);
-
- /* We should never get here. */
-}
-
-
-static void
-once_handler2 (void)
-{
- global = 1;
-}
-
-
-static void
-cl (void *arg)
-{
- ++cl_called;
-}
-
-
-static void *
-tf1 (void *arg)
-{
- pthread_cleanup_push (cl, NULL);
-
- pthread_once (&once, once_handler1);
-
- pthread_cleanup_pop (0);
-
- /* We should never get here. */
- puts ("pthread_once in tf returned");
- exit (1);
-}
-
-
-static void *
-tf2 (void *arg)
-{
- pthread_cleanup_push (cl, NULL);
-
- int r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("once_handler2: barrier_wait failed");
- exit (1);
- }
-
- pthread_cleanup_pop (0);
-
- pthread_once (&once, once_handler2);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th[2];
-
- if (pthread_barrier_init (&bar, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_create (&th[0], NULL, tf1, NULL) != 0)
- {
- puts ("first create failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("first barrier_wait failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&mut) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
- /* We unlock the mutex so that we catch the case where the pthread_cond_wait
- call incorrectly resumes and tries to get the mutex. */
- if (pthread_mutex_unlock (&mut) != 0)
- {
- puts ("mutex_unlock failed");
- return 1;
- }
-
- if (pthread_create (&th[1], NULL, tf2, NULL) != 0)
- {
- puts ("second create failed");
- return 1;
- }
-
- r = pthread_barrier_wait (&bar);
- if (r != 0 && r!= PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("second barrier_wait failed");
- return 1;
- }
-
- /* Give the second thread a chance to reach the pthread_once call. */
- sleep (2);
-
- /* Cancel the thread. */
- if (pthread_cancel (th[0]) != 0)
- {
- puts ("cancel failed");
- return 1;
- }
-
- void *result;
- pthread_join (th[0], &result);
- if (result != PTHREAD_CANCELED)
- {
- puts ("first join didn't return PTHREAD_CANCELED");
- return 1;
- }
-
- puts ("joined first thread");
-
- pthread_join (th[1], &result);
- if (result != NULL)
- {
- puts ("second join didn't return PTHREAD_CANCELED");
- return 1;
- }
-
- if (global != 1)
- {
- puts ("global still 0");
- return 1;
- }
-
- if (cl_called != 1)
- {
- printf ("cl_called = %d\n", cl_called);
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#define TIMEOUT 4
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-oncex3.c b/test/nptl/tst-oncex3.c
deleted file mode 100644
index 08225b88d..000000000
--- a/test/nptl/tst-oncex3.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-once3.c"
diff --git a/test/nptl/tst-oncex4.c b/test/nptl/tst-oncex4.c
deleted file mode 100644
index 9b4d98f3f..000000000
--- a/test/nptl/tst-oncex4.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "tst-once4.c"
diff --git a/test/nptl/tst-popen1.c b/test/nptl/tst-popen1.c
deleted file mode 100644
index 0c779fc99..000000000
--- a/test/nptl/tst-popen1.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <error.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-static void *
-dummy (void *x)
-{
- return NULL;
-}
-
-static char buf[sizeof "something\n"];
-
-static int
-do_test (void)
-{
- FILE *f;
- pthread_t p;
- int err;
-
- f = popen ("echo something", "r");
- if (f == NULL)
- error (EXIT_FAILURE, errno, "popen failed");
- if (fgets (buf, sizeof (buf), f) == NULL)
- error (EXIT_FAILURE, 0, "fgets failed");
- if (strcmp (buf, "something\n"))
- error (EXIT_FAILURE, 0, "read wrong data");
- if (pclose (f))
- error (EXIT_FAILURE, errno, "pclose returned non-zero");
- if ((err = pthread_create (&p, NULL, dummy, NULL)))
- error (EXIT_FAILURE, err, "pthread_create failed");
- if ((err = pthread_join (p, NULL)))
- error (EXIT_FAILURE, err, "pthread_join failed");
- exit (0);
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-raise1.c b/test/nptl/tst-raise1.c
deleted file mode 100644
index 45c62e19e..000000000
--- a/test/nptl/tst-raise1.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <error.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-volatile int count;
-
-void
-sh (int sig)
-{
- ++count;
-}
-
-int
-main (void)
-{
- struct sigaction sa;
- sa.sa_handler = sh;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction (SIGUSR1, &sa, NULL) < 0)
- {
- printf ("sigaction failed: %m\n");
- exit (1);
- }
- if (raise (SIGUSR1) < 0)
- {
- printf ("first raise failed: %m\n");
- exit (1);
- }
- if (raise (SIGUSR1) < 0)
- {
- printf ("second raise failed: %m\n");
- exit (1);
- }
- if (count != 2)
- {
- printf ("signal handler not called 2 times\n");
- exit (1);
- }
- exit (0);
-}
diff --git a/test/nptl/tst-rwlock1.c b/test/nptl/tst-rwlock1.c
deleted file mode 100644
index a5e8d6326..000000000
--- a/test/nptl/tst-rwlock1.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
- pthread_rwlock_t r;
-
- if (pthread_rwlock_init (&r, NULL) != 0)
- {
- puts ("rwlock_init failed");
- return 1;
- }
- puts ("rwlock_init succeeded");
-
- if (pthread_rwlock_rdlock (&r) != 0)
- {
- puts ("1st rwlock_rdlock failed");
- return 1;
- }
- puts ("1st rwlock_rdlock succeeded");
-
- if (pthread_rwlock_rdlock (&r) != 0)
- {
- puts ("2nd rwlock_rdlock failed");
- return 1;
- }
- puts ("2nd rwlock_rdlock succeeded");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("1st rwlock_unlock failed");
- return 1;
- }
- puts ("1st rwlock_unlock succeeded");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("2nd rwlock_unlock failed");
- return 1;
- }
- puts ("2nd rwlock_unlock succeeded");
-
- if (pthread_rwlock_wrlock (&r) != 0)
- {
- puts ("1st rwlock_wrlock failed");
- return 1;
- }
- puts ("1st rwlock_wrlock succeeded");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("3rd rwlock_unlock failed");
- return 1;
- }
- puts ("3rd rwlock_unlock succeeded");
-
- if (pthread_rwlock_wrlock (&r) != 0)
- {
- puts ("2nd rwlock_wrlock failed");
- return 1;
- }
- puts ("2nd rwlock_wrlock succeeded");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("4th rwlock_unlock failed");
- return 1;
- }
- puts ("4th rwlock_unlock succeeded");
-
- if (pthread_rwlock_rdlock (&r) != 0)
- {
- puts ("3rd rwlock_rdlock failed");
- return 1;
- }
- puts ("3rd rwlock_rdlock succeeded");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("5th rwlock_unlock failed");
- return 1;
- }
- puts ("5th rwlock_unlock succeeded");
-
- if (pthread_rwlock_destroy (&r) != 0)
- {
- puts ("rwlock_destroy failed");
- return 1;
- }
- puts ("rwlock_destroy succeeded");
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock10.c b/test/nptl/tst-rwlock10.c
deleted file mode 100644
index e22b1e07f..000000000
--- a/test/nptl/tst-rwlock10.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Test program for timedout read/write lock functions.
- Copyright (C) 2003 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#define INIT PTHREAD_RWLOCK_INITIALIZER
-#include "tst-rwlock8.c"
diff --git a/test/nptl/tst-rwlock11.c b/test/nptl/tst-rwlock11.c
deleted file mode 100644
index 93a1b0cce..000000000
--- a/test/nptl/tst-rwlock11.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Test program for timedout read/write lock functions.
- Copyright (C) 2003 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#define INIT PTHREAD_RWLOCK_INITIALIZER
-#include "tst-rwlock9.c"
diff --git a/test/nptl/tst-rwlock12.c b/test/nptl/tst-rwlock12.c
deleted file mode 100644
index c0e5cee92..000000000
--- a/test/nptl/tst-rwlock12.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-rwlock12.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_mutex_t *m;
- pthread_mutexattr_t ma;
- pthread_rwlock_t *r;
- pthread_rwlockattr_t ra;
- pid_t pid;
- int status = 0;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- r = (pthread_rwlock_t *) (((uintptr_t) mem + __alignof (pthread_rwlock_t))
- & ~(__alignof (pthread_rwlock_t) - 1));
- /* The following assumes alignment for a mutex is at least as high
- as that for a rwlock. Which is true in our case. */
- m = (pthread_mutex_t *) (r + 1);
-
- if (pthread_rwlockattr_init (&ra) != 0)
- {
- puts ("rwlockattr_init failed");
- return 1;
- }
-
- if (pthread_rwlockattr_setpshared (&ra, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("rwlockattr_setpshared failed");
- return 1;
- }
-
- if (pthread_rwlock_init (r, &ra) != 0)
- {
- puts ("rwlock_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_init (&ma) != 0)
- {
- puts ("rwlockattr_init failed");
- return 1;
- }
-
- if (pthread_mutexattr_setpshared (&ma, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("mutexattr_setpshared failed");
- return 1;
- }
-
- if (pthread_mutex_init (m, &ma) != 0)
- {
- puts ("mutex_init failed");
- return 1;
- }
-
- /* Lock the mutex. */
- if (pthread_mutex_lock (m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- else if (pid == 0)
- {
- /* Lock the mutex. */
- if (pthread_mutex_lock (m) != 0)
- {
- puts ("child: mutex_lock failed");
- return 1;
- }
-
- /* Try to get the rwlock. */
- if (pthread_rwlock_trywrlock (r) == 0)
- {
- puts ("rwlock_trywrlock succeeded");
- return 1;
- }
-
- /* Try again. */
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 500000000 };
- int e = pthread_rwlock_timedwrlock (r, &ts);
- if (e == 0)
- {
- puts ("rwlock_timedwrlock succeeded");
- return 1;
- }
- if (e != ETIMEDOUT)
- {
- puts ("rwlock_timedwrlock didn't return ETIMEDOUT");
- status = 1;
- }
-
- if (pthread_rwlock_tryrdlock (r) == 0)
- {
- puts ("rwlock_tryrdlock succeeded");
- return 1;
- }
-
- e = pthread_rwlock_timedrdlock (r, &ts);
- if (e == 0)
- {
- puts ("rwlock_timedrdlock succeeded");
- return 1;
- }
- if (e != ETIMEDOUT)
- {
- puts ("rwlock_timedrdlock didn't return ETIMEDOUT");
- status = 1;
- }
- }
- else
- {
- /* Lock the rwlock for writing. */
- if (pthread_rwlock_wrlock (r) != 0)
- {
- puts ("rwlock_wrlock failed");
- kill (pid, SIGTERM);
- return 1;
- }
-
- /* Allow the child to run. */
- if (pthread_mutex_unlock (m) != 0)
- {
- puts ("mutex_unlock failed");
- kill (pid, SIGTERM);
- return 1;
- }
-
- /* Just wait for the child. */
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("waitpid failed");
- kill (pid, SIGTERM);
- return 1;
- }
- }
-
- return status;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock13.c b/test/nptl/tst-rwlock13.c
deleted file mode 100644
index 8fb2a7d2b..000000000
--- a/test/nptl/tst-rwlock13.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <string.h>
-
-
-static int
-do_test (void)
-{
- pthread_rwlock_t r;
- int ret;
-
- memset (&r, 0xaa, sizeof (r));
- if ((ret = pthread_rwlock_init (&r, NULL)) != 0)
- {
- printf ("rwlock_init failed: %d\n", ret);
- return 1;
- }
-
- if ((ret = pthread_rwlock_rdlock (&r)) != 0)
- {
- printf ("rwlock_rdlock failed: %d\n", ret);
- return 1;
- }
-
- if ((ret = pthread_rwlock_unlock (&r)) != 0)
- {
- printf ("rwlock_unlock failed: %d\n", ret);
- return 1;
- }
-
- if ((ret = pthread_rwlock_wrlock (&r)) != 0)
- {
- printf ("rwlock_wrlock failed: %d\n", ret);
- return 1;
- }
-
- if ((ret = pthread_rwlock_unlock (&r)) != 0)
- {
- printf ("second rwlock_unlock failed: %d\n", ret);
- return 1;
- }
-
- if ((ret = pthread_rwlock_destroy (&r)) != 0)
- {
- printf ("second rwlock_destroy failed: %d\n", ret);
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock14.c b/test/nptl/tst-rwlock14.c
deleted file mode 100644
index 953d80282..000000000
--- a/test/nptl/tst-rwlock14.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-
-static pthread_barrier_t b;
-static pthread_rwlock_t r = PTHREAD_RWLOCK_INITIALIZER;
-
-
-static void *
-tf (void *arg)
-{
- /* Lock the read-write lock. */
- if (pthread_rwlock_wrlock (&r) != 0)
- {
- puts ("tf: cannot lock rwlock");
- exit (EXIT_FAILURE);
- }
-
- pthread_t mt = *(pthread_t *) arg;
-
- pthread_barrier_wait (&b);
-
- /* This call will never return. */
- pthread_join (mt, NULL);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- int result = 0;
- struct timespec ts;
-
- if (clock_gettime (CLOCK_REALTIME, &ts) != 0)
- {
- puts ("clock_gettime failed");
- return 1;
- }
-
- if (pthread_barrier_init (&b, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- pthread_t me = pthread_self ();
- pthread_t th;
- if (pthread_create (&th, NULL, tf, &me) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- /* Wait until the rwlock is locked. */
- pthread_barrier_wait (&b);
-
- ts.tv_nsec = -1;
-
- int e = pthread_rwlock_timedrdlock (&r, &ts);
- if (e == 0)
- {
- puts ("first rwlock_timedrdlock did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("first rwlock_timedrdlock did not return EINVAL");
- result = 1;
- }
-
- e = pthread_rwlock_timedwrlock (&r, &ts);
- if (e == 0)
- {
- puts ("first rwlock_timedwrlock did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("first rwlock_timedwrlock did not return EINVAL");
- result = 1;
- }
-
- ts.tv_nsec = 1000000000;
-
- e = pthread_rwlock_timedrdlock (&r, &ts);
- if (e == 0)
- {
- puts ("second rwlock_timedrdlock did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("second rwlock_timedrdlock did not return EINVAL");
- result = 1;
- }
-
- e = pthread_rwlock_timedrdlock (&r, &ts);
- if (e == 0)
- {
- puts ("second rwlock_timedrdlock did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("second rwlock_timedrdlock did not return EINVAL");
- result = 1;
- }
-
- ts.tv_nsec = 0x100001000LL;
- if (ts.tv_nsec != 0x100001000LL)
- ts.tv_nsec = 2000000000;
-
- e = pthread_rwlock_timedrdlock (&r, &ts);
- if (e == 0)
- {
- puts ("third rwlock_timedrdlock did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("third rwlock_timedrdlock did not return EINVAL");
- result = 1;
- }
-
- e = pthread_rwlock_timedrdlock (&r, &ts);
- if (e == 0)
- {
- puts ("third rwlock_timedrdlock did not fail");
- result = 1;
- }
- else if (e != EINVAL)
- {
- puts ("third rwlock_timedrdlock did not return EINVAL");
- result = 1;
- }
-
- if (result == 0)
- puts ("no bugs");
-
- return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock2.c b/test/nptl/tst-rwlock2.c
deleted file mode 100644
index a74ce864c..000000000
--- a/test/nptl/tst-rwlock2.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
- pthread_rwlock_t r;
- int e;
-
- if (pthread_rwlock_init (&r, NULL) != 0)
- {
- puts ("rwlock_init failed");
- return 1;
- }
- puts ("rwlock_init succeeded");
-
- if (pthread_rwlock_wrlock (&r) != 0)
- {
- puts ("1st rwlock_wrlock failed");
- return 1;
- }
- puts ("1st rwlock_wrlock succeeded");
-
- e = pthread_rwlock_tryrdlock (&r);
- if (e == 0)
- {
- puts ("rwlock_tryrdlock on rwlock with writer succeeded");
- return 1;
- }
- if (e != EBUSY)
- {
- puts ("rwlock_tryrdlock on rwlock with writer return value != EBUSY");
- return 1;
- }
- puts ("rwlock_tryrdlock on rwlock with writer failed with EBUSY");
-
- e = pthread_rwlock_trywrlock (&r);
- if (e == 0)
- {
- puts ("rwlock_trywrlock on rwlock with writer succeeded");
- return 1;
- }
- if (e != EBUSY)
- {
- puts ("rwlock_trywrlock on rwlock with writer return value != EBUSY");
- return 1;
- }
- puts ("rwlock_trywrlock on rwlock with writer failed with EBUSY");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("1st rwlock_unlock failed");
- return 1;
- }
- puts ("1st rwlock_unlock succeeded");
-
- if (pthread_rwlock_tryrdlock (&r) != 0)
- {
- puts ("rwlock_tryrdlock on unlocked rwlock failed");
- return 1;
- }
- puts ("rwlock_tryrdlock on unlocked rwlock succeeded");
-
- e = pthread_rwlock_trywrlock (&r);
- if (e == 0)
- {
- puts ("rwlock_trywrlock on rwlock with reader succeeded");
- return 1;
- }
- if (e != EBUSY)
- {
- puts ("rwlock_trywrlock on rwlock with reader return value != EBUSY");
- return 1;
- }
- puts ("rwlock_trywrlock on rwlock with reader failed with EBUSY");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("2nd rwlock_unlock failed");
- return 1;
- }
- puts ("2nd rwlock_unlock succeeded");
-
- if (pthread_rwlock_trywrlock (&r) != 0)
- {
- puts ("rwlock_trywrlock on unlocked rwlock failed");
- return 1;
- }
- puts ("rwlock_trywrlock on unlocked rwlock succeeded");
-
- e = pthread_rwlock_tryrdlock (&r);
- if (e == 0)
- {
- puts ("rwlock_tryrdlock on rwlock with writer succeeded");
- return 1;
- }
- if (e != EBUSY)
- {
- puts ("rwlock_tryrdlock on rwlock with writer return value != EBUSY");
- return 1;
- }
- puts ("rwlock_tryrdlock on rwlock with writer failed with EBUSY");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("3rd rwlock_unlock failed");
- return 1;
- }
- puts ("3rd rwlock_unlock succeeded");
-
- if (pthread_rwlock_destroy (&r) != 0)
- {
- puts ("rwlock_destroy failed");
- return 1;
- }
- puts ("rwlock_destroy succeeded");
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock2a.c b/test/nptl/tst-rwlock2a.c
deleted file mode 100644
index 615de5c01..000000000
--- a/test/nptl/tst-rwlock2a.c
+++ /dev/null
@@ -1,2 +0,0 @@
-#define TYPE PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
-#include "tst-rwlock2.c"
diff --git a/test/nptl/tst-rwlock3.c b/test/nptl/tst-rwlock3.c
deleted file mode 100644
index 1cb533896..000000000
--- a/test/nptl/tst-rwlock3.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* This test case checks more than standard compliance. An
- implementation may provide this service but it is not required to
- do so. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
- pthread_rwlock_t r;
- int e;
-
- if (pthread_rwlock_init (&r, NULL) != 0)
- {
- puts ("rwlock_init failed");
- return 1;
- }
- puts ("rwlock_init succeeded");
-
- if (pthread_rwlock_trywrlock (&r) != 0)
- {
- puts ("rwlock_trywrlock on unlocked rwlock failed");
- return 1;
- }
- puts ("rwlock_trywrlock on unlocked rwlock succeeded");
-
- e = pthread_rwlock_rdlock (&r);
- if (e == 0)
- {
- puts ("rwlock_rdlock on rwlock with writer succeeded");
- return 1;
- }
- if (e != EDEADLK)
- {
- puts ("rwlock_rdlock on rwlock with writer failed != EDEADLK");
- return 1;
- }
- puts ("rwlock_rdlock on rwlock with writer failed with EDEADLK");
-
- e = pthread_rwlock_wrlock (&r);
- if (e == 0)
- {
- puts ("rwlock_wrlock on rwlock with writer succeeded");
- return 1;
- }
- if (e != EDEADLK)
- {
- puts ("rwlock_wrlock on rwlock with writer failed != EDEADLK");
- return 1;
- }
- puts ("rwlock_wrlock on rwlock with writer failed with EDEADLK");
-
- if (pthread_rwlock_unlock (&r) != 0)
- {
- puts ("rwlock_unlock failed");
- return 1;
- }
- puts ("rwlock_unlock succeeded");
-
- if (pthread_rwlock_destroy (&r) != 0)
- {
- puts ("rwlock_destroy failed");
- return 1;
- }
- puts ("rwlock_destroy succeeded");
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock4.c b/test/nptl/tst-rwlock4.c
deleted file mode 100644
index 0bbf083e7..000000000
--- a/test/nptl/tst-rwlock4.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-rwlock4.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_rwlock_t *r;
- pthread_rwlockattr_t a;
- pid_t pid;
- char *p;
- int err;
- int s;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- r = (pthread_rwlock_t *) (((uintptr_t) mem + __alignof (pthread_rwlock_t))
- & ~(__alignof (pthread_rwlock_t) - 1));
- p = (char *) (r + 1);
-
- if (pthread_rwlockattr_init (&a) != 0)
- {
- puts ("rwlockattr_init failed");
- return 1;
- }
-
- if (pthread_rwlockattr_getpshared (&a, &s) != 0)
- {
- puts ("1st rwlockattr_getpshared failed");
- return 1;
- }
-
- if (s != PTHREAD_PROCESS_PRIVATE)
- {
- puts ("default pshared value wrong");
- return 1;
- }
-
- if (pthread_rwlockattr_setpshared (&a, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("rwlockattr_setpshared failed");
- return 1;
- }
-
- if (pthread_rwlockattr_getpshared (&a, &s) != 0)
- {
- puts ("2nd rwlockattr_getpshared failed");
- return 1;
- }
-
- if (s != PTHREAD_PROCESS_SHARED)
- {
- puts ("pshared value after setpshared call wrong");
- return 1;
- }
-
- if (pthread_rwlock_init (r, &a) != 0)
- {
- puts ("rwlock_init failed");
- return 1;
- }
-
- if (pthread_rwlock_rdlock (r) != 0)
- {
- puts ("rwlock_rdlock failed");
- return 1;
- }
-
- if (pthread_rwlockattr_destroy (&a) != 0)
- {
- puts ("rwlockattr_destroy failed");
- return 1;
- }
-
- err = pthread_rwlock_trywrlock (r);
- if (err == 0)
- {
- puts ("rwlock_trywrlock succeeded");
- return 1;
- }
- else if (err != EBUSY)
- {
- puts ("rwlock_trywrlock didn't return EBUSY");
- return 1;
- }
-
- *p = 0;
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- else if (pid == 0)
- {
- /* Play some lock ping-pong. It's our turn to unlock first. */
- if ((*p)++ != 0)
- {
- puts ("child: *p != 0");
- return 1;
- }
-
- if (pthread_rwlock_unlock (r) != 0)
- {
- puts ("child: 1st rwlock_unlock failed");
- return 1;
- }
-
- puts ("child done");
- }
- else
- {
- if (pthread_rwlock_wrlock (r) != 0)
- {
- puts ("parent: rwlock_wrlock failed");
- return 1;
- }
-
- if (*p != 1)
- {
- puts ("*p != 1");
- return 1;
- }
-
- puts ("parent done");
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock5.c b/test/nptl/tst-rwlock5.c
deleted file mode 100644
index 4914afdca..000000000
--- a/test/nptl/tst-rwlock5.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
-static pthread_rwlock_t r;
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_rwlock_wrlock (&r) == 0)
- {
- puts ("child: rwlock_wrlock succeeded");
- exit (1);
- }
-
- puts ("child: rwlock_wrlock returned");
-
- exit (1);
-}
-
-
-static int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_rwlock_init (&r, NULL) != 0)
- {
- puts ("rwlock_init failed");
- return 1;
- }
-
- if (pthread_rwlock_wrlock (&r) != 0)
- {
- puts ("rwlock_wrlock failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("mutex_lock failed");
- return 1;
- }
-
- /* Set an alarm for 1 second. The wrapper will expect this. */
- alarm (1);
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- /* This call should never return. */
- pthread_mutex_lock (&m);
-
- puts ("2nd mutex_lock returned");
- return 1;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock6.c b/test/nptl/tst-rwlock6.c
deleted file mode 100644
index 78d07167a..000000000
--- a/test/nptl/tst-rwlock6.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/time.h>
-
-
-static int kind[] =
- {
- PTHREAD_RWLOCK_PREFER_READER_NP,
- PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
- PTHREAD_RWLOCK_PREFER_WRITER_NP,
- };
-
-
-static void *
-tf (void *arg)
-{
- pthread_rwlock_t *r = arg;
-
- /* Timeout: 0.3 secs. */
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
-
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_nsec += 300000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
-
- puts ("child calling timedrdlock");
-
- int err = pthread_rwlock_timedrdlock (r, &ts);
- if (err == 0)
- {
- puts ("rwlock_timedrdlock returned");
- pthread_exit ((void *) 1l);
- }
-
- if (err != ETIMEDOUT)
- {
- printf ("err = %s (%d), expected %s (%d)\n",
- strerror (err), err, strerror (ETIMEDOUT), ETIMEDOUT);
- pthread_exit ((void *) 1l);
- }
-
- puts ("1st child timedrdlock done");
-
- struct timeval tv2;
- (void) gettimeofday (&tv2, NULL);
-
- timersub (&tv2, &tv, &tv);
-
- if (tv.tv_usec < 200000)
- {
- puts ("timeout too short");
- pthread_exit ((void *) 1l);
- }
-
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += 10;
- /* Note that the following operation makes ts invalid. */
- ts.tv_nsec += 1000000000;
-
- err = pthread_rwlock_timedrdlock (r, &ts);
- if (err == 0)
- {
- puts ("2nd timedrdlock succeeded");
- pthread_exit ((void *) 1l);
- }
- if (err != EINVAL)
- {
- puts ("2nd timedrdlock did not return EINVAL");
- pthread_exit ((void *) 1l);
- }
-
- puts ("2nd child timedrdlock done");
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- size_t cnt;
- for (cnt = 0; cnt < sizeof (kind) / sizeof (kind[0]); ++cnt)
- {
- pthread_rwlock_t r;
- pthread_rwlockattr_t a;
-
- if (pthread_rwlockattr_init (&a) != 0)
- {
- printf ("round %Zu: rwlockattr_t failed\n", cnt);
- exit (1);
- }
-
- if (pthread_rwlockattr_setkind_np (&a, kind[cnt]) != 0)
- {
- printf ("round %Zu: rwlockattr_setkind failed\n", cnt);
- exit (1);
- }
-
- if (pthread_rwlock_init (&r, &a) != 0)
- {
- printf ("round %Zu: rwlock_init failed\n", cnt);
- exit (1);
- }
-
- if (pthread_rwlockattr_destroy (&a) != 0)
- {
- printf ("round %Zu: rwlockattr_destroy failed\n", cnt);
- exit (1);
- }
-
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
-
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ++ts.tv_sec;
-
- /* Get a write lock. */
- int e = pthread_rwlock_timedwrlock (&r, &ts);
- if (e != 0)
- {
- printf ("round %Zu: rwlock_timedwrlock failed (%d)\n", cnt, e);
- exit (1);
- }
-
- puts ("1st timedwrlock done");
-
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ++ts.tv_sec;
- e = pthread_rwlock_timedrdlock (&r, &ts);
- if (e == 0)
- {
- puts ("timedrdlock succeeded");
- exit (1);
- }
- if (e != EDEADLK)
- {
- puts ("timedrdlock did not return EDEADLK");
- exit (1);
- }
-
- puts ("1st timedrdlock done");
-
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ++ts.tv_sec;
- e = pthread_rwlock_timedwrlock (&r, &ts);
- if (e == 0)
- {
- puts ("2nd timedwrlock succeeded");
- exit (1);
- }
- if (e != EDEADLK)
- {
- puts ("2nd timedwrlock did not return EDEADLK");
- exit (1);
- }
-
- puts ("2nd timedwrlock done");
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, &r) != 0)
- {
- printf ("round %Zu: create failed\n", cnt);
- exit (1);
- }
-
- puts ("started thread");
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- printf ("round %Zu: join failed\n", cnt);
- exit (1);
- }
- if (status != NULL)
- {
- printf ("failure in round %Zu\n", cnt);
- exit (1);
- }
-
- puts ("joined thread");
-
- if (pthread_rwlock_destroy (&r) != 0)
- {
- printf ("round %Zu: rwlock_destroy failed\n", cnt);
- exit (1);
- }
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock7.c b/test/nptl/tst-rwlock7.c
deleted file mode 100644
index 5189a4781..000000000
--- a/test/nptl/tst-rwlock7.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/time.h>
-
-
-static int kind[] =
- {
- PTHREAD_RWLOCK_PREFER_READER_NP,
- PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
- PTHREAD_RWLOCK_PREFER_WRITER_NP,
- };
-
-
-static void *
-tf (void *arg)
-{
- pthread_rwlock_t *r = arg;
-
- /* Timeout: 0.3 secs. */
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
-
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_nsec += 300000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
-
- int err = pthread_rwlock_timedwrlock (r, &ts);
- if (err == 0)
- {
- puts ("rwlock_timedwrlock returned");
- pthread_exit ((void *) 1l);
- }
-
- if (err != ETIMEDOUT)
- {
- printf ("err = %s (%d), expected %s (%d)\n",
- strerror (err), err, strerror (ETIMEDOUT), ETIMEDOUT);
- pthread_exit ((void *) 1l);
- }
-
- struct timeval tv2;
- (void) gettimeofday (&tv2, NULL);
-
- timersub (&tv2, &tv, &tv);
-
- if (tv.tv_usec < 200000)
- {
- puts ("timeout too short");
- pthread_exit ((void *) 1l);
- }
-
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
- ts.tv_sec += 10;
- /* Note that the following operation makes ts invalid. */
- ts.tv_nsec += 1000000000;
-
- err = pthread_rwlock_timedwrlock (r, &ts);
- if (err == 0)
- {
- puts ("2nd timedwrlock succeeded");
- pthread_exit ((void *) 1l);
- }
- if (err != EINVAL)
- {
- puts ("2nd timedwrlock did not return EINVAL");
- pthread_exit ((void *) 1l);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- size_t cnt;
- for (cnt = 0; cnt < sizeof (kind) / sizeof (kind[0]); ++cnt)
- {
- pthread_rwlock_t r;
- pthread_rwlockattr_t a;
-
- if (pthread_rwlockattr_init (&a) != 0)
- {
- printf ("round %Zu: rwlockattr_t failed\n", cnt);
- exit (1);
- }
-
- if (pthread_rwlockattr_setkind_np (&a, kind[cnt]) != 0)
- {
- printf ("round %Zu: rwlockattr_setkind failed\n", cnt);
- exit (1);
- }
-
- if (pthread_rwlock_init (&r, &a) != 0)
- {
- printf ("round %Zu: rwlock_init failed\n", cnt);
- exit (1);
- }
-
- if (pthread_rwlockattr_destroy (&a) != 0)
- {
- printf ("round %Zu: rwlockattr_destroy failed\n", cnt);
- exit (1);
- }
-
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
-
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ++ts.tv_sec;
-
- /* Get a read lock. */
- if (pthread_rwlock_timedrdlock (&r, &ts) != 0)
- {
- printf ("round %Zu: rwlock_timedrdlock failed\n", cnt);
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, &r) != 0)
- {
- printf ("round %Zu: create failed\n", cnt);
- exit (1);
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- printf ("round %Zu: join failed\n", cnt);
- exit (1);
- }
- if (status != NULL)
- {
- printf ("failure in round %Zu\n", cnt);
- exit (1);
- }
-
- if (pthread_rwlock_destroy (&r) != 0)
- {
- printf ("round %Zu: rwlock_destroy failed\n", cnt);
- exit (1);
- }
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock8.c b/test/nptl/tst-rwlock8.c
deleted file mode 100644
index b67e55a17..000000000
--- a/test/nptl/tst-rwlock8.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Test program for timedout read/write lock functions.
- Copyright (C) 2000, 2003 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <error.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-
-
-#define NWRITERS 15
-#define WRITETRIES 10
-#define NREADERS 15
-#define READTRIES 15
-
-#define DELAY 1000000
-
-#ifndef INIT
-# define INIT PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
-#endif
-
-static pthread_rwlock_t lock = INIT;
-
-
-static void *
-writer_thread (void *nr)
-{
- struct timespec delay;
- int n;
-
- delay.tv_sec = 0;
- delay.tv_nsec = DELAY;
-
- for (n = 0; n < WRITETRIES; ++n)
- {
- printf ("writer thread %ld tries again\n", (long int) nr);
-
- if (pthread_rwlock_wrlock (&lock) != 0)
- {
- puts ("wrlock failed");
- exit (1);
- }
-
- printf ("writer thread %ld succeeded\n", (long int) nr);
-
- nanosleep (&delay, NULL);
-
- if (pthread_rwlock_unlock (&lock) != 0)
- {
- puts ("unlock for writer failed");
- exit (1);
- }
-
- printf ("writer thread %ld released\n", (long int) nr);
- }
-
- return NULL;
-}
-
-
-static void *
-reader_thread (void *nr)
-{
- struct timespec delay;
- int n;
-
- delay.tv_sec = 0;
- delay.tv_nsec = DELAY;
-
- for (n = 0; n < READTRIES; ++n)
- {
- printf ("reader thread %ld tries again\n", (long int) nr);
-
- if (pthread_rwlock_rdlock (&lock) != 0)
- {
- puts ("rdlock failed");
- exit (1);
- }
-
- printf ("reader thread %ld succeeded\n", (long int) nr);
-
- nanosleep (&delay, NULL);
-
- if (pthread_rwlock_unlock (&lock) != 0)
- {
- puts ("unlock for reader failed");
- exit (1);
- }
-
- printf ("reader thread %ld released\n", (long int) nr);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t thwr[NWRITERS];
- pthread_t thrd[NREADERS];
- int n;
- void *res;
-
- /* Make standard error the same as standard output. */
- dup2 (1, 2);
-
- /* Make sure we see all message, even those on stdout. */
- setvbuf (stdout, NULL, _IONBF, 0);
-
- for (n = 0; n < NWRITERS; ++n)
- if (pthread_create (&thwr[n], NULL, writer_thread,
- (void *) (long int) n) != 0)
- {
- puts ("writer create failed");
- exit (1);
- }
-
- for (n = 0; n < NREADERS; ++n)
- if (pthread_create (&thrd[n], NULL, reader_thread,
- (void *) (long int) n) != 0)
- {
- puts ("reader create failed");
- exit (1);
- }
-
- /* Wait for all the threads. */
- for (n = 0; n < NWRITERS; ++n)
- if (pthread_join (thwr[n], &res) != 0)
- {
- puts ("writer join failed");
- exit (1);
- }
- for (n = 0; n < NREADERS; ++n)
- if (pthread_join (thrd[n], &res) != 0)
- {
- puts ("reader join failed");
- exit (1);
- }
-
- return 0;
-}
-
-#define TIMEOUT 30
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-rwlock9.c b/test/nptl/tst-rwlock9.c
deleted file mode 100644
index e9f015120..000000000
--- a/test/nptl/tst-rwlock9.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/* Test program for timedout read/write lock functions.
- Copyright (C) 2000, 2003 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <error.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-#define NWRITERS 15
-#define WRITETRIES 10
-#define NREADERS 15
-#define READTRIES 15
-
-#define TIMEOUT 1000000
-#define DELAY 1000000
-
-#ifndef INIT
-# define INIT PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
-#endif
-
-static pthread_rwlock_t lock = INIT;
-
-
-static void *
-writer_thread (void *nr)
-{
- struct timespec ts;
- struct timespec delay;
- int n;
-
- delay.tv_sec = 0;
- delay.tv_nsec = DELAY;
-
- for (n = 0; n < WRITETRIES; ++n)
- {
- int e;
- do
- {
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ts.tv_nsec += 2 * TIMEOUT;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
-
- printf ("writer thread %ld tries again\n", (long int) nr);
-
- e = pthread_rwlock_timedwrlock (&lock, &ts);
- if (e != 0 && e != ETIMEDOUT)
- {
- puts ("timedwrlock failed");
- exit (1);
- }
- }
- while (e == ETIMEDOUT);
-
- printf ("writer thread %ld succeeded\n", (long int) nr);
-
- nanosleep (&delay, NULL);
-
- if (pthread_rwlock_unlock (&lock) != 0)
- {
- puts ("unlock for writer failed");
- exit (1);
- }
-
- printf ("writer thread %ld released\n", (long int) nr);
- }
-
- return NULL;
-}
-
-
-static void *
-reader_thread (void *nr)
-{
- struct timespec ts;
- struct timespec delay;
- int n;
-
- delay.tv_sec = 0;
- delay.tv_nsec = DELAY;
-
- for (n = 0; n < READTRIES; ++n)
- {
- int e;
- do
- {
- struct timeval tv;
- (void) gettimeofday (&tv, NULL);
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- ts.tv_nsec += TIMEOUT;
- if (ts.tv_nsec >= 1000000000)
- {
- ts.tv_nsec -= 1000000000;
- ++ts.tv_sec;
- }
-
- printf ("reader thread %ld tries again\n", (long int) nr);
-
- e = pthread_rwlock_timedrdlock (&lock, &ts);
- if (e != 0 && e != ETIMEDOUT)
- {
- puts ("timedrdlock failed");
- exit (1);
- }
- }
- while (e == ETIMEDOUT);
-
- printf ("reader thread %ld succeeded\n", (long int) nr);
-
- nanosleep (&delay, NULL);
-
- if (pthread_rwlock_unlock (&lock) != 0)
- {
- puts ("unlock for reader failed");
- exit (1);
- }
-
- printf ("reader thread %ld released\n", (long int) nr);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_t thwr[NWRITERS];
- pthread_t thrd[NREADERS];
- int n;
- void *res;
-
- /* Make standard error the same as standard output. */
- dup2 (1, 2);
-
- /* Make sure we see all message, even those on stdout. */
- setvbuf (stdout, NULL, _IONBF, 0);
-
- for (n = 0; n < NWRITERS; ++n)
- if (pthread_create (&thwr[n], NULL, writer_thread,
- (void *) (long int) n) != 0)
- {
- puts ("writer create failed");
- exit (1);
- }
-
- for (n = 0; n < NREADERS; ++n)
- if (pthread_create (&thrd[n], NULL, reader_thread,
- (void *) (long int) n) != 0)
- {
- puts ("reader create failed");
- exit (1);
- }
-
- /* Wait for all the threads. */
- for (n = 0; n < NWRITERS; ++n)
- if (pthread_join (thwr[n], &res) != 0)
- {
- puts ("writer join failed");
- exit (1);
- }
- for (n = 0; n < NREADERS; ++n)
- if (pthread_join (thrd[n], &res) != 0)
- {
- puts ("reader join failed");
- exit (1);
- }
-
- return 0;
-}
-
-#undef TIMEOUT
-#define TIMEOUT 30
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sched1.c b/test/nptl/tst-sched1.c
deleted file mode 100644
index be3f1b84e..000000000
--- a/test/nptl/tst-sched1.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-
-static int global;
-
-static void *
-tf (void *a)
-{
- global = 1;
-
- return 0;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
- pthread_attr_t at;
-
- if (pthread_attr_init (&at) != 0)
- {
- puts ("attr_init failed");
- return 1;
- }
-
- if (pthread_attr_setschedpolicy (&at, SCHED_OTHER) != 0)
- {
- puts ("attr_setschedpolicy failed");
- return 1;
- }
-
- struct sched_param pa;
- if (sched_getparam (getpid (), &pa) != 0)
- {
- puts ("sched_getschedparam failed");
- return 1;
- }
-
- if (pthread_attr_setschedparam (&at, &pa) != 0)
- {
- puts ("attr_setschedparam failed");
- return 1;
- }
-
- if (pthread_attr_setinheritsched (&at, PTHREAD_EXPLICIT_SCHED) != 0)
- {
- puts ("attr_setinheritsched failed");
- return 1;
- }
-
- if (pthread_create (&th, &at, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- int e = pthread_join (th, NULL);
- if (e != 0)
- {
- printf ("join failed: %d\n", e);
- return 1;
- }
-
- if (global == 0)
- {
- puts ("thread didn't run");
- return 1;
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem1.c b/test/nptl/tst-sem1.c
deleted file mode 100644
index 5e55dd38d..000000000
--- a/test/nptl/tst-sem1.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int
-do_test (void)
-{
- sem_t s;
-
- if (sem_init (&s, 0, 1) == -1)
- {
- puts ("init failed");
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (&s)) == -1)
- {
- puts ("1st wait failed");
- return 1;
- }
-
- if (sem_post (&s) == -1)
- {
- puts ("1st post failed");
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY (sem_trywait (&s)) == -1)
- {
- puts ("1st trywait failed");
- return 1;
- }
-
- errno = 0;
- if (TEMP_FAILURE_RETRY (sem_trywait (&s)) != -1)
- {
- puts ("2nd trywait succeeded");
- return 1;
- }
- else if (errno != EAGAIN)
- {
- puts ("2nd trywait did not set errno to EAGAIN");
- return 1;
- }
-
- if (sem_post (&s) == -1)
- {
- puts ("2nd post failed");
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (&s)) == -1)
- {
- puts ("2nd wait failed");
- return 1;
- }
-
- if (sem_destroy (&s) == -1)
- {
- puts ("destroy failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem10.c b/test/nptl/tst-sem10.c
deleted file mode 100644
index ae6218a60..000000000
--- a/test/nptl/tst-sem10.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Copyright (C) 2007 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2007.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-static int
-do_test (void)
-{
- sem_t s;
- if (sem_init (&s, 0, 0) == -1)
- {
- puts ("sem_init failed");
- return 1;
- }
-
- struct timeval tv;
- if (gettimeofday (&tv, NULL) != 0)
- {
- puts ("gettimeofday failed");
- return 1;
- }
-
- struct timespec ts;
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- /* Set ts to yesterday. */
- ts.tv_sec -= 86400;
-
- int type_before;
- if (pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &type_before) != 0)
- {
- puts ("first pthread_setcanceltype failed");
- return 1;
- }
-
- errno = 0;
- if (TEMP_FAILURE_RETRY (sem_timedwait (&s, &ts)) != -1)
- {
- puts ("sem_timedwait succeeded");
- return 1;
- }
- if (errno != ETIMEDOUT)
- {
- printf ("sem_timedwait return errno = %d instead of ETIMEDOUT\n",
- errno);
- return 1;
- }
-
- int type_after;
- if (pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &type_after) != 0)
- {
- puts ("second pthread_setcanceltype failed");
- return 1;
- }
- if (type_after != PTHREAD_CANCEL_DEFERRED)
- {
- puts ("sem_timedwait changed cancellation type");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem11.c b/test/nptl/tst-sem11.c
deleted file mode 100644
index 6633ddd1f..000000000
--- a/test/nptl/tst-sem11.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <semaphore.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <internaltypes.h>
-
-#ifndef SEM_WAIT
-# define SEM_WAIT(s) sem_wait (s)
-#endif
-
-static void *
-tf (void *arg)
-{
-#ifdef PREPARE
- PREPARE
-#endif
- SEM_WAIT (arg);
- return NULL;
-}
-
-int
-main (void)
-{
- int tries = 5;
- pthread_t th;
- sem_t s;
- again:
- if (sem_init (&s, 0, 0) != 0)
- {
- puts ("sem_init failed");
- return 1;
- }
-
- struct new_sem *is = (struct new_sem *) &s;
-
- if (is->nwaiters != 0)
- {
- puts ("nwaiters not initialized");
- return 1;
- }
-
- if (pthread_create (&th, NULL, tf, &s) != 0)
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- sleep (1);
-
- if (pthread_cancel (th) != 0)
- {
- puts ("pthread_cancel failed");
- return 1;
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("pthread_join failed");
- return 1;
- }
- if (r != PTHREAD_CANCELED && --tries > 0)
- {
- /* Maybe we get the scheduling right the next time. */
- sem_destroy (&s);
- goto again;
- }
-
- if (is->nwaiters != 0)
- {
- puts ("nwaiters not reset");
- return 1;
- }
-
- return 0;
-}
diff --git a/test/nptl/tst-sem12.c b/test/nptl/tst-sem12.c
deleted file mode 100644
index 71d02b70e..000000000
--- a/test/nptl/tst-sem12.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <time.h>
-#include <sys/time.h>
-
-
-#define PREPARE \
- struct timespec ts; \
- struct timeval tv; \
- gettimeofday (&tv, NULL); \
- TIMEVAL_TO_TIMESPEC (&tv, &ts); \
- ts.tv_sec += 60;
-
-#define SEM_WAIT(s) sem_timedwait (s, &ts)
-
-#include "tst-sem11.c"
diff --git a/test/nptl/tst-sem2.c b/test/nptl/tst-sem2.c
deleted file mode 100644
index edc553c7b..000000000
--- a/test/nptl/tst-sem2.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int
-do_test (void)
-{
- sem_t s;
-
- if (sem_init (&s, 0, 0) == -1)
- {
- puts ("init failed");
- return 1;
- }
-
- /* Set an alarm for 1 second. The wrapper will expect this. */
- alarm (1);
-
- if (TEMP_FAILURE_RETRY (sem_wait (&s)) == -1)
- {
- puts ("wait failed");
- return 1;
- }
-
- /* We should never get here. */
- puts ("wait succeeded");
- return 1;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem3.c b/test/nptl/tst-sem3.c
deleted file mode 100644
index 7b75e29e2..000000000
--- a/test/nptl/tst-sem3.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <semaphore.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-sem3.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- sem_t *s;
- pid_t pid;
- char *p;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- s = (sem_t *) (((uintptr_t) mem + __alignof (sem_t))
- & ~(__alignof (sem_t) - 1));
- p = (char *) (s + 1);
-
- if (sem_init (s, 1, 1) == -1)
- {
- puts ("init failed");
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (s)) == -1)
- {
- puts ("1st wait failed");
- return 1;
- }
-
- errno = 0;
- if (TEMP_FAILURE_RETRY (sem_trywait (s)) != -1)
- {
- puts ("trywait succeeded");
- return 1;
- }
- else if (errno != EAGAIN)
- {
- puts ("trywait didn't return EAGAIN");
- return 1;
- }
-
- *p = 0;
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- else if (pid == 0)
- {
- /* Play some lock ping-pong. It's our turn to unlock first. */
- if ((*p)++ != 0)
- {
- puts ("child: *p != 0");
- return 1;
- }
-
- if (sem_post (s) == -1)
- {
- puts ("child: 1st post failed");
- return 1;
- }
-
- puts ("child done");
- }
- else
- {
- if (TEMP_FAILURE_RETRY (sem_wait (s)) == -1)
- {
- printf ("parent: 2nd wait failed: %m\n");
- return 1;
- }
-
- if (*p != 1)
- {
- puts ("*p != 1");
- return 1;
- }
-
- puts ("parent done");
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem4.c b/test/nptl/tst-sem4.c
deleted file mode 100644
index 72ed97d37..000000000
--- a/test/nptl/tst-sem4.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Copyright (C) 2002-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void
-remove_sem (int status, void *arg)
-{
- sem_unlink (arg);
-}
-
-
-int
-do_test (void)
-{
- sem_t *s;
- sem_t *s2;
- pid_t pid;
- int val;
-
- s = sem_open ("/glibc-tst-sem4", O_CREAT, 0600, 1);
- if (s == SEM_FAILED)
- {
- if (errno == ENOSYS)
- {
- puts ("sem_open not supported. Oh well.");
- return 0;
- }
-
- /* Maybe the shm filesystem has strict permissions. */
- if (errno == EACCES)
- {
- puts ("sem_open not allowed. Oh well.");
- return 0;
- }
-
- printf ("sem_open: %m\n");
- return 1;
- }
-
- on_exit (remove_sem, (void *) "/glibc-tst-sem4");
-
- /* We have the semaphore object. Now try again with O_EXCL, this
- should fail. */
- s2 = sem_open ("/glibc-tst-sem4", O_CREAT | O_EXCL, 0600, 1);
- if (s2 != SEM_FAILED)
- {
- puts ("2nd sem_open didn't fail");
- return 1;
- }
- if (errno != EEXIST)
- {
- puts ("2nd sem_open returned wrong error");
- return 1;
- }
-
- /* Check the value. */
- if (sem_getvalue (s, &val) == -1)
- {
- puts ("getvalue failed");
- return 1;
- }
- if (val != 1)
- {
- printf ("initial value wrong: got %d, expected 1\n", val);
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (s)) == -1)
- {
- puts ("1st sem_wait failed");
- return 1;
- }
-
- pid = fork ();
- if (pid == -1)
- {
- printf ("fork failed: %m\n");
- return 1;
- }
-
- if (pid == 0)
- {
- /* Child. */
-
- /* Check the value. */
- if (sem_getvalue (s, &val) == -1)
- {
- puts ("child: getvalue failed");
- return 1;
- }
- if (val != 0)
- {
- printf ("child: value wrong: got %d, expect 0\n", val);
- return 1;
- }
-
- if (sem_post (s) == -1)
- {
- puts ("child: post failed");
- return 1;
- }
- }
- else
- {
- if (TEMP_FAILURE_RETRY (sem_wait (s)) == -1)
- {
- puts ("2nd sem_wait failed");
- return 1;
- }
-
- if (sem_getvalue (s, &val) == -1)
- {
- puts ("parent: 2nd getvalue failed");
- return 1;
- }
- if (val != 0)
- {
- printf ("parent: value wrong: got %d, expected 0\n", val);
- return 1;
- }
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem5.c b/test/nptl/tst-sem5.c
deleted file mode 100644
index f0b905c33..000000000
--- a/test/nptl/tst-sem5.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-
-static int
-do_test (void)
-{
- sem_t s;
- struct timespec ts;
- struct timeval tv;
-
- if (sem_init (&s, 0, 1) == -1)
- {
- puts ("sem_init failed");
- return 1;
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (&s)) == -1)
- {
- puts ("sem_wait failed");
- return 1;
- }
-
- if (gettimeofday (&tv, NULL) != 0)
- {
- puts ("gettimeofday failed");
- return 1;
- }
-
- TIMEVAL_TO_TIMESPEC (&tv, &ts);
-
- /* We wait for half a second. */
- ts.tv_nsec += 500000000;
- if (ts.tv_nsec >= 1000000000)
- {
- ++ts.tv_sec;
- ts.tv_nsec -= 1000000000;
- }
-
- errno = 0;
- if (TEMP_FAILURE_RETRY (sem_timedwait (&s, &ts)) != -1)
- {
- puts ("sem_timedwait succeeded");
- return 1;
- }
- if (errno != ETIMEDOUT)
- {
- printf ("sem_timedwait return errno = %d instead of ETIMEDOUT\n",
- errno);
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem6.c b/test/nptl/tst-sem6.c
deleted file mode 100644
index 16adb95ef..000000000
--- a/test/nptl/tst-sem6.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static void
-handler (int sig)
-{
- struct sigaction sa;
-
- sa.sa_handler = SIG_DFL;
- sa.sa_flags = 0;
- sigemptyset (&sa.sa_mask);
-
- sigaction (SIGALRM, &sa, NULL);
-
- /* Rearm the timer. */
- alarm (1);
-}
-
-
-static int
-do_test (void)
-{
- sem_t s;
- struct sigaction sa;
-
- sa.sa_handler = handler;
- sa.sa_flags = 0;
- sigemptyset (&sa.sa_mask);
-
- sigaction (SIGALRM, &sa, NULL);
-
- if (sem_init (&s, 0, 0) == -1)
- {
- puts ("init failed");
- return 1;
- }
-
- /* Set an alarm for 1 second. The wrapper will expect this. */
- alarm (1);
-
- int res = sem_wait (&s);
- if (res == 0)
- {
- puts ("wait succeeded");
- return 1;
- }
- if (res != -1 || errno != EINTR)
- {
- puts ("wait didn't fail with EINTR");
- return 1;
- }
-
- return 0;
-}
-
-#define TIMEOUT 3
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sem7.c b/test/nptl/tst-sem7.c
deleted file mode 100644
index 34ddb4058..000000000
--- a/test/nptl/tst-sem7.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void
-remove_sem (int status, void *arg)
-{
- sem_unlink (arg);
-}
-
-
-int
-main (void)
-{
- sem_t *s;
- sem_t *s2;
- sem_t *s3;
-
- s = sem_open ("/glibc-tst-sem7", O_CREAT, 0600, 1);
- if (s == SEM_FAILED)
- {
- if (errno == ENOSYS)
- {
- puts ("sem_open not supported. Oh well.");
- return 0;
- }
-
- /* Maybe the shm filesystem has strict permissions. */
- if (errno == EACCES)
- {
- puts ("sem_open not allowed. Oh well.");
- return 0;
- }
-
- printf ("sem_open: %m\n");
- return 1;
- }
-
- on_exit (remove_sem, (void *) "/glibc-tst-sem7");
-
- /* We have the semaphore object. Now try again. We should get the
- same address. */
- s2 = sem_open ("/glibc-tst-sem7", O_CREAT, 0600, 1);
- if (s2 == SEM_FAILED)
- {
- puts ("2nd sem_open failed");
- return 1;
- }
- if (s != s2)
- {
- puts ("2nd sem_open didn't return the same address");
- return 1;
- }
-
- /* And again, this time without O_CREAT. */
- s3 = sem_open ("/glibc-tst-sem7", 0);
- if (s3 == SEM_FAILED)
- {
- puts ("3rd sem_open failed");
- return 1;
- }
- if (s != s3)
- {
- puts ("3rd sem_open didn't return the same address");
- return 1;
- }
-
- /* Now close the handle. Three times. */
- if (sem_close (s2) != 0)
- {
- puts ("1st sem_close failed");
- return 1;
- }
- if (sem_close (s) != 0)
- {
- puts ("2nd sem_close failed");
- return 1;
- }
- if (sem_close (s3) != 0)
- {
- puts ("3rd sem_close failed");
- return 1;
- }
-
- return 0;
-}
diff --git a/test/nptl/tst-sem8.c b/test/nptl/tst-sem8.c
deleted file mode 100644
index 286590fd6..000000000
--- a/test/nptl/tst-sem8.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void
-remove_sem (int status, void *arg)
-{
- sem_unlink (arg);
-}
-
-
-int
-main (void)
-{
- sem_t *s;
- int i;
-
- on_exit (remove_sem, (void *) "/glibc-tst-sem8");
-
- for (i = 0; i < 3; ++i)
- {
- s = sem_open ("/glibc-tst-sem8", O_CREAT, 0600, 1);
- if (s == SEM_FAILED)
- {
- if (errno == ENOSYS)
- {
- puts ("sem_open not supported. Oh well.");
- return 0;
- }
-
- /* Maybe the shm filesystem has strict permissions. */
- if (errno == EACCES)
- {
- puts ("sem_open not allowed. Oh well.");
- return 0;
- }
-
- printf ("sem_open: %m\n");
- return 1;
- }
-
- /* Now close the handle. */
- if (sem_close (s) != 0)
- {
- puts ("sem_close failed");
- return 1;
- }
- }
-
- return 0;
-}
diff --git a/test/nptl/tst-sem9.c b/test/nptl/tst-sem9.c
deleted file mode 100644
index bdb594b09..000000000
--- a/test/nptl/tst-sem9.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void
-remove_sem (int status, void *arg)
-{
- sem_unlink (arg);
-}
-
-
-int
-main (void)
-{
- sem_t *s;
- int i;
-
- on_exit (remove_sem, (void *) "/glibc-tst-sem9");
-
- for (i = 0; i < 3; ++i)
- {
- s = sem_open ("/glibc-tst-sem9", O_CREAT, 0600, 1);
- if (s == SEM_FAILED)
- {
- if (errno == ENOSYS)
- {
- puts ("sem_open not supported. Oh well.");
- return 0;
- }
-
- /* Maybe the shm filesystem has strict permissions. */
- if (errno == EACCES)
- {
- puts ("sem_open not allowed. Oh well.");
- return 0;
- }
-
- printf ("sem_open: %m\n");
- return 1;
- }
-
- /* Now close the handle. */
- if (sem_close (s) != 0)
- {
- puts ("sem_close failed");
- return 1;
- }
-
- /* And remove it. */
- if (sem_unlink ("/glibc-tst-sem9") != 0)
- {
- puts ("sem_unlink failed");
- return 1;
- }
- }
-
- return 0;
-}
diff --git a/test/nptl/tst-signal1.c b/test/nptl/tst-signal1.c
deleted file mode 100644
index 0f952fd24..000000000
--- a/test/nptl/tst-signal1.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static sigset_t ss;
-static pthread_barrier_t *b;
-
-
-static void *
-tf (void *arg)
-{
- sigdelset (&ss, SIGINT);
-
- if (pthread_sigmask (SIG_SETMASK, &ss, NULL) != 0)
- {
- puts ("2nd pthread_sigmask failed");
- exit (1);
- }
-
- pthread_barrier_wait (b);
-
- int sig;
- int res = sigwait (&ss, &sig);
- if (res == 0)
- {
- printf ("sigwait returned successfully with signal %d\n", sig);
- exit (1);
- }
-
- printf ("sigwait returned with %s (%d)\n", strerror (res), res);
-
- return NULL;
-}
-
-
-static void
-receiver (void)
-{
- pthread_t th;
-
- /* Make sure the process doesn't run forever. */
- alarm (10);
-
- sigfillset (&ss);
-
- if (pthread_sigmask (SIG_SETMASK, &ss, NULL) != 0)
- {
- puts ("1st pthread_sigmask failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- exit (1);
- }
-
- if (pthread_join (th, NULL) == 0)
- {
- puts ("thread joined?!");
- exit (1);
- }
-
- _exit (0);
-}
-
-
-static int
-do_test (void)
-{
- char tmp[] = "/tmp/tst-signal1-XXXXXX";
-
- int fd = mkstemp (tmp);
- if (fd == -1)
- {
- puts ("mkstemp failed");
- exit (1);
- }
-
- unlink (tmp);
-
- int i;
- for (i = 0; i < 20; ++i)
- write (fd, "foobar xyzzy", 12);
-
- b = mmap (NULL, sizeof (pthread_barrier_t), PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (b == MAP_FAILED)
- {
- puts ("mmap failed");
- exit (1);
- }
-
- pthread_barrierattr_t ba;
- if (pthread_barrierattr_init (&ba) != 0)
- {
- puts ("barrierattr_init failed");
- exit (1);
- }
-
- if (pthread_barrierattr_setpshared (&ba, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("barrierattr_setpshared failed");
- exit (1);
- }
-
- if (pthread_barrier_init (b, &ba, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (pthread_barrierattr_destroy (&ba) != 0)
- {
- puts ("barrierattr_destroy failed");
- exit (1);
- }
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- receiver ();
-
- pthread_barrier_wait (b);
-
- /* Wait a bit more. */
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 };
- nanosleep (&ts, NULL);
-
- /* Send the signal. */
- puts ("sending the signal now");
- kill (pid, SIGINT);
-
- /* Wait for the process to terminate. */
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("wrong child reported terminated");
- exit (1);
- }
-
- if (!WIFSIGNALED (status))
- {
- puts ("child wasn't signalled");
- exit (1);
- }
-
- if (WTERMSIG (status) != SIGINT)
- {
- puts ("child not terminated with SIGINT");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-signal2.c b/test/nptl/tst-signal2.c
deleted file mode 100644
index 37d5611e4..000000000
--- a/test/nptl/tst-signal2.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-#include <string.h>
-
-
-static sigset_t ss;
-static pthread_barrier_t *b;
-
-
-static void *
-tf (void *arg)
-{
- pthread_barrier_wait (b);
-
- puts ("child: calling sigwait now");
-
- int sig;
- int err;
- err = sigwait (&ss, &sig);
- if (err != 0)
- {
- printf ("sigwait returned unsuccessfully: %s (%d)\n",
- strerror (err), err);
- _exit (1);
- }
-
- puts ("sigwait returned");
-
- if (sig != SIGINT)
- {
- printf ("caught signal %d, expected %d (SIGINT)\n", sig, SIGINT);
- _exit (1);
- }
-
- puts ("child thread terminating now");
-
- return NULL;
-}
-
-
-static void
-receiver (void)
-{
- pthread_t th;
-
- /* Make sure the process doesn't run forever. */
- alarm (10);
-
- sigfillset (&ss);
-
- if (pthread_sigmask (SIG_SETMASK, &ss, NULL) != 0)
- {
- puts ("1st pthread_sigmask failed");
- _exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- _exit (1);
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("thread didn't join");
- _exit (1);
- }
-
- puts ("join succeeded");
-
- _exit (0);
-}
-
-
-static int
-do_test (void)
-{
- char tmp[] = "/tmp/tst-signal1-XXXXXX";
-
- int fd = mkstemp (tmp);
- if (fd == -1)
- {
- puts ("mkstemp failed");
- exit (1);
- }
-
- unlink (tmp);
-
- int i;
- for (i = 0; i < 20; ++i)
- write (fd, "foobar xyzzy", 12);
-
- b = mmap (NULL, sizeof (pthread_barrier_t), PROT_READ | PROT_WRITE,
- MAP_SHARED, fd, 0);
- if (b == MAP_FAILED)
- {
- puts ("mmap failed");
- exit (1);
- }
-
- pthread_barrierattr_t ba;
- if (pthread_barrierattr_init (&ba) != 0)
- {
- puts ("barrierattr_init failed");
- exit (1);
- }
-
- if (pthread_barrierattr_setpshared (&ba, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("barrierattr_setpshared failed");
- exit (1);
- }
-
- if (pthread_barrier_init (b, &ba, 2) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (pthread_barrierattr_destroy (&ba) != 0)
- {
- puts ("barrierattr_destroy failed");
- exit (1);
- }
-
- pid_t pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- exit (1);
- }
-
- if (pid == 0)
- receiver ();
-
- pthread_barrier_wait (b);
-
- /* Wait a bit more. */
- struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 };
- nanosleep (&ts, NULL);
-
- /* Send the signal. */
- puts ("sending the signal now");
- kill (pid, SIGINT);
-
- /* Wait for the process to terminate. */
- int status;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &status, 0)) != pid)
- {
- puts ("wrong child reported terminated");
- exit (1);
- }
-
- if (!WIFEXITED (status))
- {
- if (WIFSIGNALED (status))
- printf ("child exited with signal %d\n", WTERMSIG (status));
- else
- puts ("child didn't exit normally");
- exit (1);
- }
-
- if (WEXITSTATUS (status) != 0)
- {
- printf ("exit status %d != 0\n", WEXITSTATUS (status));
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-signal3.c b/test/nptl/tst-signal3.c
deleted file mode 100644
index fbd9ace8e..000000000
--- a/test/nptl/tst-signal3.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-/* Number of different signalss to use. Also is the number of
- threads. */
-#define N 10
-/* Maximum number of threads in flight at any one time. */
-#define INFLIGHT 5
-/* Number of signals sent in total. */
-#define ROUNDS 10000
-
-
-static int received[N][N];
-static int nsig[N];
-static pthread_t th[N];
-static sem_t sem;
-static pthread_mutex_t lock[N];
-static pthread_t th_main;
-static int sig0;
-
-static void
-handler (int sig)
-{
- int i;
- for (i = 0; i < N; ++i)
- if (pthread_equal (pthread_self (), th[i]))
- break;
-
- if (i == N)
- {
- if (pthread_equal (pthread_self (), th_main))
- puts ("signal received by main thread");
- else
- printf ("signal received by unknown thread (%lx)\n",
- (unsigned long int) pthread_self ());
- exit (1);
- }
-
- ++received[i][sig - sig0];
-
- sem_post (&sem);
-}
-
-
-static void *
-tf (void *arg)
-{
- int idx = (long int) arg;
-
- sigset_t ss;
- sigemptyset (&ss);
-
- int i;
- for (i = 0; i <= idx; ++i)
- sigaddset (&ss, sig0 + i);
-
- if (pthread_sigmask (SIG_UNBLOCK, &ss, NULL) != 0)
- {
- printf ("thread %d: pthread_sigmask failed\n", i);
- exit (1);
- }
-
- pthread_mutex_lock (&lock[idx]);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- /* Block all signals. */
- sigset_t ss;
- sigfillset (&ss);
-
- th_main = pthread_self ();
-
- sig0 = SIGRTMIN;
-
- if (pthread_sigmask (SIG_SETMASK, &ss, NULL) != 0)
- {
- puts ("1st pthread_sigmask failed");
- exit (1);
- }
-
- /* Install the handler. */
- int i;
- for (i = 0; i < N; ++i)
- {
- struct sigaction sa =
- {
- .sa_handler = handler,
- .sa_flags = 0
- };
- sigfillset (&sa.sa_mask);
-
- if (sigaction (sig0 + i, &sa, NULL) != 0)
- {
- printf ("sigaction for signal %d failed\n", i);
- exit (1);
- }
- }
-
- if (sem_init (&sem, 0, INFLIGHT) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- for (i = 0; i < N; ++i)
- {
- if (pthread_mutex_init (&lock[i], NULL) != 0)
- {
- printf ("mutex_init[%d] failed\n", i);
- }
-
- if (pthread_mutex_lock (&lock[i]) != 0)
- {
- printf ("mutex_lock[%d] failed\n", i);
- }
-
- if (pthread_create (&th[i], &a, tf, (void *) (long int) i) != 0)
- {
- printf ("create of thread %d failed\n", i);
- exit (1);
- }
- }
-
- if (pthread_attr_destroy (&a) != 0)
- {
- puts ("attr_destroy failed");
- exit (1);
- }
-
- int result = 0;
- unsigned int r = 42;
- pid_t pid = getpid ();
-
- for (i = 0; i < ROUNDS; ++i)
- {
- if (TEMP_FAILURE_RETRY (sem_wait (&sem)) != 0)
- {
- printf ("sem_wait round %d failed: %m\n", i);
- exit (1);
- }
-
- int s = rand_r (&r) % N;
-
- kill (pid, sig0 + s);
- }
-
- void *status;
- for (i = 0; i < N; ++i)
- {
- if (pthread_mutex_unlock (&lock[i]) != 0)
- {
- printf ("unlock %d failed\n", i);
- exit (1);
- }
-
- if (pthread_join (th[i], &status) != 0)
- {
- printf ("join %d failed\n", i);
- result = 1;
- }
- else if (status != NULL)
- {
- printf ("%d: result != NULL\n", i);
- result = 1;
- }
- }
-
- int total = 0;
- for (i = 0; i < N; ++i)
- {
- int j;
-
- for (j = 0; j <= i; ++j)
- total += received[i][j];
-
- for (j = i + 1; j < N; ++j)
- if (received[i][j] != 0)
- {
- printf ("thread %d received signal SIGRTMIN+%d\n", i, j);
- result = 1;
- }
- }
-
- if (total != ROUNDS)
- {
- printf ("total number of handled signals is %d, expected %d\n",
- total, ROUNDS);
- result = 1;
- }
-
- printf ("A total of %d signals sent and received\n", total);
- for (i = 0; i < N; ++i)
- {
- printf ("thread %2d:", i);
-
- int j;
- for (j = 0; j <= i; ++j)
- {
- printf (" %5d", received[i][j]);
- nsig[j] += received[i][j];
- }
-
- putchar ('\n');
-
- }
-
- printf ("\nTotal :");
- for (i = 0; i < N; ++i)
- printf (" %5d", nsig[i]);
- putchar ('\n');
-
- return result;
-}
-
-#define TIMEOUT 10
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-signal4.c b/test/nptl/tst-signal4.c
deleted file mode 100644
index f249b7b75..000000000
--- a/test/nptl/tst-signal4.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static int
-do_test (void)
-{
- sigset_t ss;
-
- sigemptyset (&ss);
-
- int i;
- for (i = 0; i < 10000; ++i)
- {
- long int r = random ();
-
- if (r != SIG_BLOCK && r != SIG_SETMASK && r != SIG_UNBLOCK)
- {
- int e = pthread_sigmask (r, &ss, NULL);
-
- if (e == 0)
- {
- printf ("pthread_sigmask succeeded for how = %ld\n", r);
- exit (1);
- }
-
- if (e != EINVAL)
- {
- puts ("pthread_sigmask didn't return EINVAL");
- exit (1);
- }
- }
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-signal5.c b/test/nptl/tst-signal5.c
deleted file mode 100644
index 5c0ac0c17..000000000
--- a/test/nptl/tst-signal5.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static sigset_t ss;
-
-
-static void *
-tf (void *arg)
-{
- sigset_t ss2;
- if (pthread_sigmask (SIG_SETMASK, NULL, &ss2) != 0)
- {
- puts ("child: sigmask failed");
- exit (1);
- }
-
- int i;
- for (i = 1; i < 32; ++i)
- if (sigismember (&ss, i) && ! sigismember (&ss2, i))
- {
- printf ("signal %d set in parent mask, but not in child\n", i);
- exit (1);
- }
- else if (! sigismember (&ss, i) && sigismember (&ss2, i))
- {
- printf ("signal %d set in child mask, but not in parent\n", i);
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- sigemptyset (&ss);
- sigaddset (&ss, SIGUSR1);
- if (pthread_sigmask (SIG_SETMASK, &ss, NULL) != 0)
- {
- puts ("1st sigmask failed");
- exit (1);
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("1st create failed");
- exit (1);
- }
-
- void *r;
- if (pthread_join (th, &r) != 0)
- {
- puts ("1st join failed");
- exit (1);
- }
-
- sigemptyset (&ss);
- sigaddset (&ss, SIGUSR2);
- sigaddset (&ss, SIGFPE);
- if (pthread_sigmask (SIG_SETMASK, &ss, NULL) != 0)
- {
- puts ("2nd sigmask failed");
- exit (1);
- }
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("2nd create failed");
- exit (1);
- }
-
- if (pthread_join (th, &r) != 0)
- {
- puts ("2nd join failed");
- exit (1);
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-signal6.c b/test/nptl/tst-signal6.c
deleted file mode 100644
index 31827b7c2..000000000
--- a/test/nptl/tst-signal6.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-#define N 2
-static pthread_barrier_t bar;
-static struct
-{
- void *p;
- pthread_t s;
-} ti[N];
-static int sig1;
-
-
-static void
-handler (int sig)
-{
- pthread_t self = pthread_self ();
- size_t i;
-
- for (i = 0; i < N; ++i)
- if (ti[i].s == self)
- {
- if ((uintptr_t) ti[i].p <= (uintptr_t) &self
- && (uintptr_t) ti[i].p + 2 * MINSIGSTKSZ > (uintptr_t) &self)
- {
- puts ("alt stack not used");
- exit (1);
- }
-
- printf ("thread %zu used alt stack for signal %d\n", i, sig);
-
- return;
- }
-
- puts ("handler: thread not found");
- exit (1);
-}
-
-
-static void *
-tf (void *arg)
-{
- size_t nr = (uintptr_t) arg;
- if (nr >= N)
- {
- puts ("wrong nr parameter");
- exit (1);
- }
-
- sigset_t ss;
- sigemptyset (&ss);
- size_t i;
- for (i = 0; i < N; ++i)
- if (i != nr)
- if (sigaddset (&ss, sig1 + i) != 0)
- {
- puts ("tf: sigaddset failed");
- exit (1);
- }
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("tf: sigmask failed");
- exit (1);
- }
-
- void *p = malloc (2 * MINSIGSTKSZ);
- if (p == NULL)
- {
- puts ("tf: malloc failed");
- exit (1);
- }
-
- stack_t s;
- s.ss_sp = p;
- s.ss_size = 2 * MINSIGSTKSZ;
- s.ss_flags = 0;
- if (sigaltstack (&s, NULL) != 0)
- {
- puts ("tf: sigaltstack failed");
- exit (1);
- }
-
- ti[nr].p = p;
- ti[nr].s = pthread_self ();
-
- pthread_barrier_wait (&bar);
-
- pthread_barrier_wait (&bar);
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- sig1 = SIGRTMIN;
- if (sig1 + N > SIGRTMAX)
- {
- puts ("too few RT signals");
- return 0;
- }
-
- struct sigaction sa;
- sa.sa_handler = handler;
- sa.sa_flags = 0;
- sigemptyset (&sa.sa_mask);
-
- if (sigaction (sig1, &sa, NULL) != 0
- || sigaction (sig1 + 1, &sa, NULL) != 0
- || sigaction (sig1 + 2, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- return 1;
- }
-
- if (pthread_barrier_init (&bar, NULL, 1 + N) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- pthread_t th[N];
- size_t i;
- for (i = 0; i < N; ++i)
- if (pthread_create (&th[i], NULL, tf, (void *) (long int) i) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- /* Block the three signals. */
- sigset_t ss;
- sigemptyset (&ss);
- for (i = 0; i <= N; ++i)
- sigaddset (&ss, sig1 + i);
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("main: sigmask failed");
- return 1;
- }
-
- pthread_barrier_wait (&bar);
-
- /* Send some signals. */
- pid_t me = getpid ();
- kill (me, sig1 + N);
- for (i = 0; i < N; ++i)
- kill (me, sig1 + i);
- kill (me, sig1 + N);
-
- /* Give the signals a chance to be worked on. */
- sleep (1);
-
- pthread_barrier_wait (&bar);
-
- for (i = 0; i < N; ++i)
- if (pthread_join (th[i], NULL) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-signal7.c b/test/nptl/tst-signal7.c
deleted file mode 100644
index 629f377ae..000000000
--- a/test/nptl/tst-signal7.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthreadP.h>
-#include <signal.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
- int result = 0;
-
- errno = 0;
- if (sigaction (SIGCANCEL, NULL, NULL) == 0)
- {
- puts ("sigaction(SIGCANCEL) did not fail");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- puts ("sigaction(SIGCANCEL) did not set errno to EINVAL");
- result = 1;
- }
-
- errno = 0;
- if (sigaction (SIGSETXID, NULL, NULL) == 0)
- {
- puts ("sigaction(SIGSETXID) did not fail");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- puts ("sigaction(SIGSETXID) did not set errno to EINVAL");
- result = 1;
- }
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-spin1.c b/test/nptl/tst-spin1.c
deleted file mode 100644
index b55c9584a..000000000
--- a/test/nptl/tst-spin1.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-
-
-static int
-do_test (void)
-{
- pthread_spinlock_t s;
-
- if (pthread_spin_init (&s, PTHREAD_PROCESS_PRIVATE) != 0)
- {
- puts ("spin_init failed");
- return 1;
- }
-
- if (pthread_spin_lock (&s) != 0)
- {
- puts ("spin_lock failed");
- return 1;
- }
-
- if (pthread_spin_unlock (&s) != 0)
- {
- puts ("spin_unlock failed");
- return 1;
- }
-
- if (pthread_spin_destroy (&s) != 0)
- {
- puts ("spin_destroy failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-spin2.c b/test/nptl/tst-spin2.c
deleted file mode 100644
index 6119a3b23..000000000
--- a/test/nptl/tst-spin2.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <sys/wait.h>
-
-
-static int
-do_test (void)
-{
- size_t ps = sysconf (_SC_PAGESIZE);
- char tmpfname[] = "/tmp/tst-spin2.XXXXXX";
- char data[ps];
- void *mem;
- int fd;
- pthread_spinlock_t *s;
- pid_t pid;
- char *p;
- int err;
-
- fd = mkstemp (tmpfname);
- if (fd == -1)
- {
- printf ("cannot open temporary file: %m\n");
- return 1;
- }
-
- /* Make sure it is always removed. */
- unlink (tmpfname);
-
- /* Create one page of data. */
- memset (data, '\0', ps);
-
- /* Write the data to the file. */
- if (write (fd, data, ps) != (ssize_t) ps)
- {
- puts ("short write");
- return 1;
- }
-
- mem = mmap (NULL, ps, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (mem == MAP_FAILED)
- {
- printf ("mmap failed: %m\n");
- return 1;
- }
-
- s = (pthread_spinlock_t *) (((uintptr_t) mem
- + __alignof (pthread_spinlock_t))
- & ~(__alignof (pthread_spinlock_t) - 1));
- p = (char *) (s + 1);
-
- if (pthread_spin_init (s, PTHREAD_PROCESS_SHARED) != 0)
- {
- puts ("spin_init failed");
- return 1;
- }
-
- if (pthread_spin_lock (s) != 0)
- {
- puts ("spin_lock failed");
- return 1;
- }
-
- err = pthread_spin_trylock (s);
- if (err == 0)
- {
- puts ("1st spin_trylock succeeded");
- return 1;
- }
- else if (err != EBUSY)
- {
- puts ("1st spin_trylock didn't return EBUSY");
- return 1;
- }
-
- err = pthread_spin_unlock (s);
- if (err != 0)
- {
- puts ("parent: spin_unlock failed");
- return 1;
- }
-
- err = pthread_spin_trylock (s);
- if (err != 0)
- {
- puts ("2nd spin_trylock failed");
- return 1;
- }
-
- *p = 0;
-
- puts ("going to fork now");
- pid = fork ();
- if (pid == -1)
- {
- puts ("fork failed");
- return 1;
- }
- else if (pid == 0)
- {
- /* Play some lock ping-pong. It's our turn to unlock first. */
- if ((*p)++ != 0)
- {
- puts ("child: *p != 0");
- return 1;
- }
-
- if (pthread_spin_unlock (s) != 0)
- {
- puts ("child: 1st spin_unlock failed");
- return 1;
- }
-
- puts ("child done");
- }
- else
- {
- if (pthread_spin_lock (s) != 0)
- {
- puts ("parent: 2nd spin_lock failed");
- return 1;
- }
-
- puts ("waiting for child");
-
- waitpid (pid, NULL, 0);
-
- puts ("parent done");
- }
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-spin3.c b/test/nptl/tst-spin3.c
deleted file mode 100644
index b54d42c33..000000000
--- a/test/nptl/tst-spin3.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int
-do_test (void)
-{
- pthread_spinlock_t s;
-
- if (pthread_spin_init (&s, PTHREAD_PROCESS_PRIVATE) != 0)
- {
- puts ("spin_init failed");
- return 1;
- }
-
- if (pthread_spin_lock (&s) != 0)
- {
- puts ("1st spin_lock failed");
- return 1;
- }
-
- /* Set an alarm for 1 second. The wrapper will expect this. */
- alarm (1);
-
- /* This call should never return. */
- pthread_spin_lock (&s);
-
- puts ("2nd spin_lock returned");
- return 1;
-}
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-stack-align.h b/test/nptl/tst-stack-align.h
deleted file mode 100644
index 9a59d7137..000000000
--- a/test/nptl/tst-stack-align.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdint.h>
-
-#define TEST_STACK_ALIGN() \
- ({ \
- double _d = 12.0; \
- long double _ld = 15.0; \
- int _ret = 0; \
- printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \
- if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \
- if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \
- _ret = 1; \
- _ret; \
- })
diff --git a/test/nptl/tst-stack1.c b/test/nptl/tst-stack1.c
deleted file mode 100644
index 288024a1d..000000000
--- a/test/nptl/tst-stack1.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <limits.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/param.h>
-#include <unistd.h>
-
-
-static void *stack;
-static size_t size;
-
-
-static void *
-tf (void *a)
-{
- int result = 0;
-
- puts ("child start");
-
- pthread_attr_t attr;
- if (pthread_getattr_np (pthread_self (), &attr) != 0)
- {
- puts ("getattr_np failed");
- exit (1);
- }
-
- size_t test_size;
- void *test_stack;
- if (pthread_attr_getstack (&attr, &test_stack, &test_size) != 0)
- {
- puts ("attr_getstack failed");
- exit (1);
- }
-
- if (test_size != size)
- {
- printf ("child: reported size differs: is %zu, expected %zu\n",
- test_size, size);
- result = 1;
- }
-
- if (test_stack != stack)
- {
- printf ("child: reported stack address differs: is %p, expected %p\n",
- test_stack, stack);
- result = 1;
- }
-
- puts ("child OK");
-
- return result ? (void *) 1l : NULL;
-}
-
-
-int
-do_test (void)
-{
- int result = 0;
-
- size = MAX (4 * getpagesize (), PTHREAD_STACK_MIN);
- if (posix_memalign (&stack, getpagesize (), size) != 0)
- {
- puts ("out of memory while allocating the stack memory");
- exit (1);
- }
-
- pthread_attr_t attr;
- if (pthread_attr_init (&attr) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- puts ("attr_setstack");
- if (pthread_attr_setstack (&attr, stack, size) != 0)
- {
- puts ("attr_setstack failed");
- exit (1);
- }
-
- size_t test_size;
- void *test_stack;
- puts ("attr_getstack");
- if (pthread_attr_getstack (&attr, &test_stack, &test_size) != 0)
- {
- puts ("attr_getstack failed");
- exit (1);
- }
-
- if (test_size != size)
- {
- printf ("reported size differs: is %zu, expected %zu\n",
- test_size, size);
- result = 1;
- }
-
- if (test_stack != stack)
- {
- printf ("reported stack address differs: is %p, expected %p\n",
- test_stack, stack);
- result = 1;
- }
-
- puts ("create");
-
- pthread_t th;
- if (pthread_create (&th, &attr, tf, NULL) != 0)
- {
- puts ("failed to create thread");
- exit (1);
- }
-
- void *status;
- if (pthread_join (th, &status) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- result |= status != NULL;
-
- return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-stack2.c b/test/nptl/tst-stack2.c
deleted file mode 100644
index 7b1e2f6a6..000000000
--- a/test/nptl/tst-stack2.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Test whether it is possible to create a thread with PTHREAD_STACK_MIN
- stack size. */
-
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <limits.h>
-
-static int seen;
-
-static void *
-tf (void *p)
-{
- ++seen;
- return NULL;
-}
-
-static int
-do_test (void)
-{
- pthread_attr_t attr;
- pthread_attr_init (&attr);
-
- int result = 0;
- int res = pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);
- if (res)
- {
- printf ("pthread_attr_setstacksize failed %d\n", res);
- result = 1;
- }
-
- /* Create the thread. */
- pthread_t th;
- res = pthread_create (&th, &attr, tf, NULL);
- if (res)
- {
- printf ("pthread_create failed %d\n", res);
- result = 1;
- }
- else
- {
- res = pthread_join (th, NULL);
- if (res)
- {
- printf ("pthread_join failed %d\n", res);
- result = 1;
- }
- }
-
- if (seen != 1)
- {
- printf ("seen %d != 1\n", seen);
- result = 1;
- }
-
- return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-stdio1.c b/test/nptl/tst-stdio1.c
deleted file mode 100644
index 2396e0185..000000000
--- a/test/nptl/tst-stdio1.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static void *tf (void *a)
-{
- flockfile (stdout);
- /* This call should never return. */
- return a;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- flockfile (stdout);
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- write (2, "create failed\n", 14);
- _exit (1);
- }
-
- pthread_join (th, NULL);
-
- puts ("join returned");
-
- return 0;
-}
-
-
-#define EXPECTED_SIGNAL SIGALRM
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-stdio2.c b/test/nptl/tst-stdio2.c
deleted file mode 100644
index 4ac778cc0..000000000
--- a/test/nptl/tst-stdio2.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static void *tf (void *a)
-{
- puts ("start tf");
-
- /* Multiple locking, implicitly or explicitly, must be possible. */
- flockfile (stdout);
-
- puts ("after first flockfile");
-
- flockfile (stdout);
-
- puts ("foo");
-
- funlockfile (stdout);
-
- puts ("after first funlockfile");
-
- funlockfile (stdout);
-
- puts ("all done");
-
- return a;
-}
-
-
-int
-do_test (void)
-{
- pthread_t th;
-
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- write (2, "create failed\n", 14);
- _exit (1);
- }
-
- void *result;
- if (pthread_join (th, &result) != 0)
- {
- puts ("join failed");
- exit (1);
- }
- else if (result != NULL)
- {
- printf ("wrong return value: %p, expected %p\n", result, NULL);
- exit (1);
- }
-
- puts ("join returned succsefully");
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-sysconf.c b/test/nptl/tst-sysconf.c
deleted file mode 100644
index da493ef43..000000000
--- a/test/nptl/tst-sysconf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-
-
-static int
-do_test (void)
-{
- puts ("We expect no limits");
- /* We have no fixed limit on the number of threads. Make sure the
- headers tell the right story. */
-#ifdef PTHREAD_THREADS_MAX
- printf ("Header report maximum number of threads = %lu\n",
- (unsigned long int) PTHREAD_THREADS_MAX);
- return 1;
-#else
- long int r = sysconf (_SC_THREAD_THREADS_MAX);
- if (r != -1)
- {
- printf ("sysconf(_SC_THREAD_THREADS_MAX) return %ld\n", r);
- return 1;
- }
-#endif
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-timer2.c b/test/nptl/tst-timer2.c
deleted file mode 100644
index 60026c1ef..000000000
--- a/test/nptl/tst-timer2.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Test for crashing bugs when trying to create too many timers. */
-
-#include <stdio.h>
-#include <time.h>
-#include <signal.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <unistd.h>
-
-#if _POSIX_THREADS
-# include <pthread.h>
-
-void
-thread (union sigval arg)
-{
- puts ("Timeout");
-}
-
-int
-do_test (void)
-{
- int i, res;
- timer_t timerId;
- struct itimerspec itval;
- struct sigevent sigev;
-
- itval.it_interval.tv_sec = 2;
- itval.it_interval.tv_nsec = 0;
- itval.it_value.tv_sec = 2;
- itval.it_value.tv_nsec = 0;
-
- sigev.sigev_notify = SIGEV_THREAD;
- sigev.sigev_signo = SIGRTMIN;
- sigev.sigev_notify_function = thread;
- sigev.sigev_notify_attributes = 0;
- sigev.sigev_value.sival_ptr = (void *) &timerId;
-
- for (i = 0; i < 100; i++)
- {
- printf ("cnt = %d\n", i);
-
- if (timer_create (CLOCK_REALTIME, &sigev, &timerId) < 0)
- {
- perror ("timer_create");
- continue;
- }
-
- res = timer_settime (timerId, 0, &itval, NULL);
- if (res < 0)
- perror ("timer_settime");
-
- res = timer_delete (timerId);
- if (res < 0)
- perror ("timer_delete");
- }
-
- return 0;
-}
-
-# define TEST_FUNCTION do_test ()
-#else
-# define TEST_FUNCTION 0
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-timer3.c b/test/nptl/tst-timer3.c
deleted file mode 100644
index 8113f6690..000000000
--- a/test/nptl/tst-timer3.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/* Test for bogus per-thread deletion of timers. */
-
-#include <stdio.h>
-#include <error.h>
-#include <time.h>
-#include <signal.h>
-#include <stdint.h>
-#include <string.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <unistd.h>
-#if _POSIX_THREADS
-# include <pthread.h>
-
-
-/* Creating timers in another thread should work too. */
-static void *
-do_timer_create (void *arg)
-{
- struct sigevent *const sigev = arg;
- timer_t *const timerId = sigev->sigev_value.sival_ptr;
- if (timer_create (CLOCK_REALTIME, sigev, timerId) < 0)
- {
- printf ("timer_create: %m\n");
- return NULL;
- }
- return timerId;
-}
-
-
-static int
-do_test (void)
-{
- int i, res;
- timer_t timerId;
- struct itimerspec itval;
- struct sigevent sigev;
-
- itval.it_interval.tv_sec = 2;
- itval.it_interval.tv_nsec = 0;
- itval.it_value.tv_sec = 2;
- itval.it_value.tv_nsec = 0;
-
- sigev.sigev_notify = SIGEV_SIGNAL;
- sigev.sigev_signo = SIGALRM;
- sigev.sigev_value.sival_ptr = (void *) &timerId;
-
- for (i = 0; i < 100; i++)
- {
- printf ("cnt = %d\n", i);
-
- pthread_t thr;
- res = pthread_create (&thr, NULL, &do_timer_create, &sigev);
- if (res)
- {
- printf ("pthread_create: %s\n", strerror (res));
- continue;
- }
- void *val;
- res = pthread_join (thr, &val);
- if (res)
- {
- printf ("pthread_join: %s\n", strerror (res));
- continue;
- }
- if (val == NULL)
- continue;
-
- res = timer_settime (timerId, 0, &itval, NULL);
- if (res < 0)
- printf ("timer_settime: %m\n");
-
- res = timer_delete (timerId);
- if (res < 0)
- printf ("timer_delete: %m\n");
- }
-
- return 0;
-}
-
-# define TEST_FUNCTION do_test ()
-#else
-# define TEST_FUNCTION 0
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-timer4.c b/test/nptl/tst-timer4.c
deleted file mode 100644
index fafb5651b..000000000
--- a/test/nptl/tst-timer4.c
+++ /dev/null
@@ -1,647 +0,0 @@
-/* Tests for POSIX timer implementation.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2004
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#if _POSIX_THREADS
-# include <pthread.h>
-
-# ifndef TEST_CLOCK
-# define TEST_CLOCK CLOCK_REALTIME
-# endif
-
-pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
-pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-
-timer_t timer_none, timer_sig1, timer_sig2, timer_thr1, timer_thr2;
-
-int thr1_cnt, thr1_err;
-union sigval thr1_sigval;
-struct timespec thr1_ts;
-
-static void
-thr1 (union sigval sigval)
-{
- pthread_mutex_lock (&lock);
- thr1_err = clock_gettime (TEST_CLOCK, &thr1_ts);
- if (thr1_cnt >= 5)
- {
- struct itimerspec it = { };
- thr1_err |= timer_settime (timer_thr1, 0, &it, NULL);
- }
- thr1_sigval = sigval;
- ++thr1_cnt;
- pthread_cond_signal (&cond);
- pthread_mutex_unlock (&lock);
-}
-
-int thr2_cnt, thr2_err;
-union sigval thr2_sigval;
-size_t thr2_guardsize;
-struct timespec thr2_ts;
-
-static void
-thr2 (union sigval sigval)
-{
- pthread_attr_t nattr;
- int err = 0;
- size_t guardsize = -1;
- int ret = pthread_getattr_np (pthread_self (), &nattr);
- if (ret)
- {
- errno = ret;
- printf ("*** pthread_getattr_np failed: %m\n");
- err = 1;
- }
- else
- {
- ret = pthread_attr_getguardsize (&nattr, &guardsize);
- if (ret)
- {
- errno = ret;
- printf ("*** pthread_attr_getguardsize failed: %m\n");
- err = 1;
- }
- if (pthread_attr_destroy (&nattr) != 0)
- {
- puts ("*** pthread_attr_destroy failed");
- err = 1;
- }
- }
- pthread_mutex_lock (&lock);
- thr2_err = clock_gettime (TEST_CLOCK, &thr2_ts) | err;
- if (thr2_cnt >= 5)
- {
- struct itimerspec it = { };
- thr2_err |= timer_settime (timer_thr2, 0, &it, NULL);
- }
- thr2_sigval = sigval;
- ++thr2_cnt;
- thr2_guardsize = guardsize;
- pthread_cond_signal (&cond);
- pthread_mutex_unlock (&lock);
-}
-
-volatile int sig1_cnt, sig1_err;
-volatile union sigval sig1_sigval;
-struct timespec sig1_ts;
-
-static void
-sig1_handler (int sig, siginfo_t *info, void *ctx)
-{
- int err = 0;
- if (sig != SIGRTMIN) err |= 1 << 0;
- if (info->si_signo != SIGRTMIN) err |= 1 << 1;
- if (info->si_code != SI_TIMER) err |= 1 << 2;
- if (clock_gettime (TEST_CLOCK, &sig1_ts) != 0)
- err |= 1 << 3;
- if (sig1_cnt >= 5)
- {
- struct itimerspec it = { };
- if (timer_settime (timer_sig1, 0, &it, NULL))
- err |= 1 << 4;
- }
- sig1_err |= err;
- sig1_sigval = info->si_value;
- ++sig1_cnt;
-}
-
-volatile int sig2_cnt, sig2_err;
-volatile union sigval sig2_sigval;
-struct timespec sig2_ts;
-
-static void
-sig2_handler (int sig, siginfo_t *info, void *ctx)
-{
- int err = 0;
- if (sig != SIGRTMIN + 1) err |= 1 << 0;
- if (info->si_signo != SIGRTMIN + 1) err |= 1 << 1;
- if (info->si_code != SI_TIMER) err |= 1 << 2;
- if (clock_gettime (TEST_CLOCK, &sig2_ts) != 0)
- err |= 1 << 3;
- if (sig2_cnt >= 5)
- {
- struct itimerspec it = { };
- if (timer_settime (timer_sig2, 0, &it, NULL))
- err |= 1 << 4;
- }
- sig2_err |= err;
- sig2_sigval = info->si_value;
- ++sig2_cnt;
-}
-
-/* Check if end is later or equal to start + nsec. */
-static int
-check_ts (const char *name, const struct timespec *start,
- const struct timespec *end, long msec)
-{
- struct timespec ts = *start;
-
- ts.tv_sec += msec / 1000000;
- ts.tv_nsec += (msec % 1000000) * 1000;
- if (ts.tv_nsec >= 1000000000)
- {
- ++ts.tv_sec;
- ts.tv_nsec -= 1000000000;
- }
- if (end->tv_sec < ts.tv_sec
- || (end->tv_sec == ts.tv_sec && end->tv_nsec < ts.tv_nsec))
- {
- printf ("\
-*** timer %s invoked too soon: %ld.%09ld instead of expected %ld.%09ld\n",
- name, (long) end->tv_sec, end->tv_nsec,
- (long) ts.tv_sec, ts.tv_nsec);
- return 1;
- }
- else
- return 0;
-}
-
-#define TIMEOUT 15
-#define TEST_FUNCTION do_test ()
-static int
-do_test (void)
-{
- int result = 0;
-
-#ifdef TEST_CLOCK_MISSING
- const char *missing = TEST_CLOCK_MISSING (TEST_CLOCK);
- if (missing != NULL)
- {
- printf ("%s missing, skipping test\n", missing);
- return 0;
- }
-#endif
-
- struct timespec ts;
- if (clock_gettime (TEST_CLOCK, &ts) != 0)
- {
- printf ("*** clock_gettime failed: %m\n");
- result = 1;
- }
- else
- printf ("clock_gettime returned timespec = { %ld, %ld }\n",
- (long) ts.tv_sec, ts.tv_nsec);
-
- if (clock_getres (TEST_CLOCK, &ts) != 0)
- {
- printf ("*** clock_getres failed: %m\n");
- result = 1;
- }
- else
- printf ("clock_getres returned timespec = { %ld, %ld }\n",
- (long) ts.tv_sec, ts.tv_nsec);
-
- struct sigevent ev;
- memset (&ev, 0x11, sizeof (ev));
- ev.sigev_notify = SIGEV_NONE;
- if (timer_create (TEST_CLOCK, &ev, &timer_none) != 0)
- {
- printf ("*** timer_create for timer_none failed: %m\n");
- return 1;
- }
-
- struct sigaction sa = { .sa_sigaction = sig1_handler,
- .sa_flags = SA_SIGINFO };
- sigemptyset (&sa.sa_mask);
- sigaction (SIGRTMIN, &sa, NULL);
- sa.sa_sigaction = sig2_handler;
- sigaction (SIGRTMIN + 1, &sa, NULL);
-
- memset (&ev, 0x22, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN;
- ev.sigev_value.sival_ptr = &ev;
- if (timer_create (TEST_CLOCK, &ev, &timer_sig1) != 0)
- {
- printf ("*** timer_create for timer_sig1 failed: %m\n");
- return 1;
- }
-
- memset (&ev, 0x33, sizeof (ev));
- ev.sigev_notify = SIGEV_SIGNAL;
- ev.sigev_signo = SIGRTMIN + 1;
- ev.sigev_value.sival_int = 163;
- if (timer_create (TEST_CLOCK, &ev, &timer_sig2) != 0)
- {
- printf ("*** timer_create for timer_sig2 failed: %m\n");
- return 1;
- }
-
- memset (&ev, 0x44, sizeof (ev));
- ev.sigev_notify = SIGEV_THREAD;
- ev.sigev_notify_function = thr1;
- ev.sigev_notify_attributes = NULL;
- ev.sigev_value.sival_ptr = &ev;
- if (timer_create (TEST_CLOCK, &ev, &timer_thr1) != 0)
- {
- printf ("*** timer_create for timer_thr1 failed: %m\n");
- return 1;
- }
-
- pthread_attr_t nattr;
- if (pthread_attr_init (&nattr)
- || pthread_attr_setguardsize (&nattr, 0))
- {
- puts ("*** pthread_attr_t setup failed");
- result = 1;
- }
-
- memset (&ev, 0x55, sizeof (ev));
- ev.sigev_notify = SIGEV_THREAD;
- ev.sigev_notify_function = thr2;
- ev.sigev_notify_attributes = &nattr;
- ev.sigev_value.sival_int = 111;
- if (timer_create (TEST_CLOCK, &ev, &timer_thr2) != 0)
- {
- printf ("*** timer_create for timer_thr2 failed: %m\n");
- return 1;
- }
-
- int ret = timer_getoverrun (timer_thr1);
- if (ret != 0)
- {
- if (ret == -1)
- printf ("*** timer_getoverrun failed: %m\n");
- else
- printf ("*** timer_getoverrun returned %d != 0\n", ret);
- result = 1;
- }
-
- struct itimerspec it;
- it.it_value.tv_sec = 0;
- it.it_value.tv_nsec = -26;
- it.it_interval.tv_sec = 0;
- it.it_interval.tv_nsec = 0;
- if (timer_settime (timer_sig1, 0, &it, NULL) == 0)
- {
- puts ("*** timer_settime with negative tv_nsec unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("*** timer_settime with negative tv_nsec did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 100000;
- it.it_interval.tv_nsec = 1000000000;
- if (timer_settime (timer_sig2, 0, &it, NULL) == 0)
- {
- puts ("\
-*** timer_settime with tv_nsec 1000000000 unexpectedly succeeded");
- result = 1;
- }
- else if (errno != EINVAL)
- {
- printf ("*** timer_settime with tv_nsec 1000000000 did not fail with "
- "EINVAL: %m\n");
- result = 1;
- }
-
-#if 0
- it.it_value.tv_nsec = 0;
- it.it_interval.tv_nsec = -26;
- if (timer_settime (timer_thr1, 0, &it, NULL) != 0)
- {
- printf ("\
-!!! timer_settime with it_value 0 it_interval invalid failed: %m\n");
- /* FIXME: is this mandated by POSIX?
- result = 1; */
- }
-
- it.it_interval.tv_nsec = 3000000000;
- if (timer_settime (timer_thr2, 0, &it, NULL) != 0)
- {
- printf ("\
-!!! timer_settime with it_value 0 it_interval invalid failed: %m\n");
- /* FIXME: is this mandated by POSIX?
- result = 1; */
- }
-#endif
-
- struct timespec startts;
- if (clock_gettime (TEST_CLOCK, &startts) != 0)
- {
- printf ("*** clock_gettime failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 100000000;
- it.it_interval.tv_nsec = 0;
- if (timer_settime (timer_none, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_none failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 200000000;
- if (timer_settime (timer_thr1, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_thr1 failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 300000000;
- if (timer_settime (timer_thr2, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_thr2 failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 400000000;
- if (timer_settime (timer_sig1, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_sig1 failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 500000000;
- if (TEMP_FAILURE_RETRY (timer_settime (timer_sig2, 0, &it, NULL)) != 0)
- {
- printf ("*** timer_settime timer_sig2 failed: %m\n");
- result = 1;
- }
-
- pthread_mutex_lock (&lock);
- while (thr1_cnt == 0 || thr2_cnt == 0)
- pthread_cond_wait (&cond, &lock);
- pthread_mutex_unlock (&lock);
-
- while (sig1_cnt == 0 || sig2_cnt == 0)
- {
- ts.tv_sec = 0;
- ts.tv_nsec = 100000000;
- nanosleep (&ts, NULL);
- }
-
- pthread_mutex_lock (&lock);
-
- if (thr1_cnt != 1)
- {
- printf ("*** thr1 not called exactly once, but %d times\n", thr1_cnt);
- result = 1;
- }
- else if (thr1_err)
- {
- puts ("*** an error occurred in thr1");
- result = 1;
- }
- else if (thr1_sigval.sival_ptr != &ev)
- {
- printf ("*** thr1_sigval.sival_ptr %p != %p\n",
- thr1_sigval.sival_ptr, &ev);
- result = 1;
- }
- else if (check_ts ("thr1", &startts, &thr1_ts, 200000))
- result = 1;
-
- if (thr2_cnt != 1)
- {
- printf ("*** thr2 not called exactly once, but %d times\n", thr2_cnt);
- result = 1;
- }
- else if (thr2_err)
- {
- puts ("*** an error occurred in thr2");
- result = 1;
- }
- else if (thr2_sigval.sival_int != 111)
- {
- printf ("*** thr2_sigval.sival_ptr %d != 111\n", thr2_sigval.sival_int);
- result = 1;
- }
- else if (check_ts ("thr2", &startts, &thr2_ts, 300000))
- result = 1;
- else if (thr2_guardsize != 0)
- {
- printf ("*** thr2 guardsize %zd != 0\n", thr2_guardsize);
- result = 1;
- }
-
- pthread_mutex_unlock (&lock);
-
- if (sig1_cnt != 1)
- {
- printf ("*** sig1 not called exactly once, but %d times\n", sig1_cnt);
- result = 1;
- }
- else if (sig1_err)
- {
- printf ("*** errors occurred in sig1 handler %x\n", sig1_err);
- result = 1;
- }
- else if (sig1_sigval.sival_ptr != &ev)
- {
- printf ("*** sig1_sigval.sival_ptr %p != %p\n",
- sig1_sigval.sival_ptr, &ev);
- result = 1;
- }
- else if (check_ts ("sig1", &startts, &sig1_ts, 400000))
- result = 1;
-
- if (sig2_cnt != 1)
- {
- printf ("*** sig2 not called exactly once, but %d times\n", sig2_cnt);
- result = 1;
- }
- else if (sig2_err)
- {
- printf ("*** errors occurred in sig2 handler %x\n", sig2_err);
- result = 1;
- }
- else if (sig2_sigval.sival_int != 163)
- {
- printf ("*** sig2_sigval.sival_ptr %d != 163\n", sig2_sigval.sival_int);
- result = 1;
- }
- else if (check_ts ("sig2", &startts, &sig2_ts, 500000))
- result = 1;
-
- if (timer_gettime (timer_none, &it) != 0)
- {
- printf ("*** timer_gettime timer_none failed: %m\n");
- result = 1;
- }
- else if (it.it_value.tv_sec || it.it_value.tv_nsec
- || it.it_interval.tv_sec || it.it_interval.tv_nsec)
- {
- printf ("\
-*** timer_gettime timer_none returned { %ld.%09ld, %ld.%09ld }\n",
- (long) it.it_value.tv_sec, it.it_value.tv_nsec,
- (long) it.it_interval.tv_sec, it.it_interval.tv_nsec);
- result = 1;
- }
-
- if (clock_gettime (TEST_CLOCK, &startts) != 0)
- {
- printf ("*** clock_gettime failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_sec = 1;
- it.it_value.tv_nsec = 0;
- it.it_interval.tv_sec = 0;
- it.it_interval.tv_nsec = 100000000;
- if (timer_settime (timer_none, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_none failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 100000000;
- it.it_interval.tv_nsec = 200000000;
- if (timer_settime (timer_thr1, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_thr1 failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 200000000;
- it.it_interval.tv_nsec = 300000000;
- if (timer_settime (timer_thr2, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_thr2 failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 300000000;
- it.it_interval.tv_nsec = 400000000;
- if (timer_settime (timer_sig1, 0, &it, NULL) != 0)
- {
- printf ("*** timer_settime timer_sig1 failed: %m\n");
- result = 1;
- }
-
- it.it_value.tv_nsec = 400000000;
- it.it_interval.tv_nsec = 500000000;
- if (TEMP_FAILURE_RETRY (timer_settime (timer_sig2, 0, &it, NULL)) != 0)
- {
- printf ("*** timer_settime timer_sig2 failed: %m\n");
- result = 1;
- }
-
- pthread_mutex_lock (&lock);
- while (thr1_cnt < 6 || thr2_cnt < 6)
- pthread_cond_wait (&cond, &lock);
- pthread_mutex_unlock (&lock);
-
- while (sig1_cnt < 6 || sig2_cnt < 6)
- {
- ts.tv_sec = 0;
- ts.tv_nsec = 100000000;
- nanosleep (&ts, NULL);
- }
-
- pthread_mutex_lock (&lock);
-
- if (thr1_err)
- {
- puts ("*** an error occurred in thr1");
- result = 1;
- }
- else if (check_ts ("thr1", &startts, &thr1_ts, 1100000 + 4 * 200000))
- result = 1;
-
- if (thr2_err)
- {
- puts ("*** an error occurred in thr2");
- result = 1;
- }
- else if (check_ts ("thr2", &startts, &thr2_ts, 1200000 + 4 * 300000))
- result = 1;
- else if (thr2_guardsize != 0)
- {
- printf ("*** thr2 guardsize %zd != 0\n", thr2_guardsize);
- result = 1;
- }
-
- pthread_mutex_unlock (&lock);
-
- if (sig1_err)
- {
- printf ("*** errors occurred in sig1 handler %x\n", sig1_err);
- result = 1;
- }
- else if (check_ts ("sig1", &startts, &sig1_ts, 1300000 + 4 * 400000))
- result = 1;
-
- if (sig2_err)
- {
- printf ("*** errors occurred in sig2 handler %x\n", sig2_err);
- result = 1;
- }
- else if (check_ts ("sig2", &startts, &sig2_ts, 1400000 + 4 * 500000))
- result = 1;
-
- if (timer_gettime (timer_none, &it) != 0)
- {
- printf ("*** timer_gettime timer_none failed: %m\n");
- result = 1;
- }
- else if (it.it_interval.tv_sec || it.it_interval.tv_nsec != 100000000)
- {
- printf ("\
-!!! second timer_gettime timer_none returned it_interval %ld.%09ld\n",
- (long) it.it_interval.tv_sec, it.it_interval.tv_nsec);
- /* FIXME: For now disabled.
- result = 1; */
- }
-
- if (timer_delete (timer_none) != 0)
- {
- printf ("*** timer_delete for timer_none failed: %m\n");
- result = 1;
- }
-
- if (timer_delete (timer_sig1) != 0)
- {
- printf ("*** timer_delete for timer_sig1 failed: %m\n");
- result = 1;
- }
-
- if (timer_delete (timer_sig2) != 0)
- {
- printf ("*** timer_delete for timer_sig2 failed: %m\n");
- result = 1;
- }
-
- if (timer_delete (timer_thr1) != 0)
- {
- printf ("*** timer_delete for timer_thr1 failed: %m\n");
- result = 1;
- }
-
- if (timer_delete (timer_thr2) != 0)
- {
- printf ("*** timer_delete for timer_thr2 failed: %m\n");
- result = 1;
- }
- return result;
-}
-#else
-# define TEST_FUNCTION 0
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-timer5.c b/test/nptl/tst-timer5.c
deleted file mode 100644
index 6466c8efc..000000000
--- a/test/nptl/tst-timer5.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Timer test using the monotonic clock. */
-
-#include <time.h>
-#include <unistd.h>
-
-#if defined CLOCK_MONOTONIC && defined _POSIX_MONOTONIC_CLOCK
-
-# define TEST_CLOCK CLOCK_MONOTONIC
-# define TEST_CLOCK_MISSING(clock) \
- (setup_test () ? "CLOCK_MONOTONIC" : NULL)
-
-# include <stdio.h>
-
-static int
-setup_test (void)
-{
- if (sysconf (_SC_MONOTONIC_CLOCK) <= 0)
- return 1;
-
- /* The user-level timers implementation doesn't support CLOCK_MONOTONIC,
- even though sysconf claims it will. */
- timer_t t;
- if (timer_create (TEST_CLOCK, NULL, &t) != 0)
- {
- printf ("timer_create: %m\n");
- return 1;
- }
- timer_delete (t);
-
- return 0;
-}
-
-# include "tst-timer4.c"
-
-#else
-# define TEST_FUNCTION 0
-# include "../test-skeleton.c"
-#endif
diff --git a/test/nptl/tst-tls1.c b/test/nptl/tst-tls1.c
deleted file mode 100644
index a7cf8f408..000000000
--- a/test/nptl/tst-tls1.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <tls.h>
-
-#if HAVE___THREAD
-struct test_s
-{
- int a;
- int b;
-};
-
-#define INIT_A 1
-#define INIT_B 42
-/* Deliberately not static. */
-__thread struct test_s s __attribute__ ((tls_model ("initial-exec"))) =
-{
- .a = INIT_A,
- .b = INIT_B
-};
-
-
-static void *
-tf (void *arg)
-{
- if (s.a != INIT_A || s.b != INIT_B)
- {
- puts ("initial value of s in child thread wrong");
- exit (1);
- }
-
- ++s.a;
-
- return NULL;
-}
-#endif
-
-
-int
-do_test (void)
-{
-#if !HAVE___THREAD
-
- puts ("No __thread support in compiler, test skipped.");
-
- return 0;
-#else
-
- if (s.a != INIT_A || s.b != INIT_B)
- {
- puts ("initial value of s in main thread wrong");
- exit (1);
- }
-
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
-#define N 10
- int i;
- for (i = 0; i < N; ++i)
- {
-#define M 10
- pthread_t th[M];
- int j;
- for (j = 0; j < M; ++j, ++s.a)
- if (pthread_create (&th[j], &a, tf, NULL) != 0)
- {
- puts ("pthread_create failed");
- exit (1);
- }
-
- for (j = 0; j < M; ++j)
- if (pthread_join (th[j], NULL) != 0)
- {
- puts ("pthread_join failed");
- exit (1);
- }
- }
-
- if (pthread_attr_destroy (&a) != 0)
- {
- puts ("attr_destroy failed");
- exit (1);
- }
-
- return 0;
-#endif
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tls2.c b/test/nptl/tst-tls2.c
deleted file mode 100644
index f60f4a5e3..000000000
--- a/test/nptl/tst-tls2.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <semaphore.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <tls.h>
-
-#if HAVE___THREAD
-
-#define N 10
-static pthread_t th[N];
-
-
-#define CB(n) \
-static void \
-cb##n (void) \
-{ \
- if (th[n] != pthread_self ()) \
- { \
- write (STDOUT_FILENO, "wrong callback\n", 15); \
- _exit (1); \
- } \
-}
-CB (0)
-CB (1)
-CB (2)
-CB (3)
-CB (4)
-CB (5)
-CB (6)
-CB (7)
-CB (8)
-CB (9)
-static void (*cbs[]) (void) =
-{
- cb0, cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9
-};
-
-
-static __thread void (*fp) (void) __attribute__ ((tls_model ("local-exec")));
-
-
-static sem_t s;
-
-
-#define THE_SIG SIGUSR1
-static void
-handler (int sig)
-{
- if (sig != THE_SIG)
- {
- write (STDOUT_FILENO, "wrong signal\n", 13);
- _exit (1);
- }
-
- fp ();
-
- if (sem_post (&s) != 0)
- {
- write (STDOUT_FILENO, "sem_post failed\n", 16);
- _exit (1);
- }
-}
-
-
-static pthread_barrier_t b;
-
-#define TOTAL_SIGS 1000
-static int nsigs;
-
-
-static void *
-tf (void *arg)
-{
- fp = arg;
-
- pthread_barrier_wait (&b);
-
- pthread_barrier_wait (&b);
-
- if (nsigs != TOTAL_SIGS)
- {
- puts ("barrier_wait prematurely returns");
- exit (1);
- }
-
- return NULL;
-}
-#endif
-
-int
-do_test (void)
-{
-#if !HAVE___THREAD
-
- puts ("No __thread support in compiler, test skipped.");
-
- return 0;
-#else
-
- if (pthread_barrier_init (&b, NULL, N + 1) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (sem_init (&s, 0, 0) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- struct sigaction sa;
- sa.sa_handler = handler;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction (THE_SIG, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- exit (1);
- }
-
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- int i;
- for (i = 0; i < N; ++i)
- if (pthread_create (&th[i], &a, tf, cbs[i]) != 0)
- {
- puts ("pthread_create failed");
- exit (1);
- }
-
- if (pthread_attr_destroy (&a) != 0)
- {
- puts ("attr_destroy failed");
- exit (1);
- }
-
- pthread_barrier_wait (&b);
-
- sigset_t ss;
- sigemptyset (&ss);
- sigaddset (&ss, THE_SIG);
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("pthread_sigmask failed");
- exit (1);
- }
-
- /* Start sending signals. */
- for (i = 0; i < TOTAL_SIGS; ++i)
- {
- if (kill (getpid (), THE_SIG) != 0)
- {
- puts ("kill failed");
- exit (1);
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (&s)) != 0)
- {
- puts ("sem_wait failed");
- exit (1);
- }
-
- ++nsigs;
- }
-
- pthread_barrier_wait (&b);
-
- for (i = 0; i < N; ++i)
- if (pthread_join (th[i], NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- return 0;
-#endif
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tls3.c b/test/nptl/tst-tls3.c
deleted file mode 100644
index 0d4e5140c..000000000
--- a/test/nptl/tst-tls3.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <dlfcn.h>
-#include <errno.h>
-#include <pthread.h>
-#include <signal.h>
-#include <semaphore.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <pthreaddef.h>
-#include <tls.h>
-
-#define THE_SIG SIGUSR1
-
-
-#define N 10
-static pthread_t th[N];
-
-
-#define CB(n) \
-static void \
-cb##n (void) \
-{ \
- if (th[n] != pthread_self ()) \
- { \
- write (STDOUT_FILENO, "wrong callback\n", 15); \
- _exit (1); \
- } \
-}
-CB (0)
-CB (1)
-CB (2)
-CB (3)
-CB (4)
-CB (5)
-CB (6)
-CB (7)
-CB (8)
-CB (9)
-static void (*cbs[]) (void) =
-{
- cb0, cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9
-};
-
-
-sem_t s;
-
-
-pthread_barrier_t b;
-
-#define TOTAL_SIGS 1000
-int nsigs;
-
-
-int
-do_test (void)
-{
-#if !HAVE___THREAD
-
- puts ("No __thread support in compiler, test skipped.");
-
- return 0;
-#else
-
- if ((uintptr_t) pthread_self () & (TCB_ALIGNMENT - 1))
- {
- puts ("initial thread's struct pthread not aligned enough");
- exit (1);
- }
-
- if (pthread_barrier_init (&b, NULL, N + 1) != 0)
- {
- puts ("barrier_init failed");
- exit (1);
- }
-
- if (sem_init (&s, 0, 0) != 0)
- {
- puts ("sem_init failed");
- exit (1);
- }
-
- void *h = dlopen ("tst-tls3mod.so", RTLD_LAZY);
- if (h == NULL)
- {
- puts ("dlopen failed");
- exit (1);
- }
-
- void *(*tf) (void *) = dlsym (h, "tf");
- if (tf == NULL)
- {
- puts ("dlsym for tf failed");
- exit (1);
- }
-
- void (*setup_tf) (pthread_barrier_t*, int*, sem_t*) = dlsym(h, "setup_tf");
- if (setup_tf == NULL)
- {
- puts ("dlsym for setup_tf failed");
- exit(1);
- }
-
- setup_tf (&b, &nsigs, &s);
-
- struct sigaction sa;
- sa.sa_handler = dlsym (h, "handler");
- if (sa.sa_handler == NULL)
- {
- puts ("dlsym for handler failed");
- exit (1);
- }
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction (THE_SIG, &sa, NULL) != 0)
- {
- puts ("sigaction failed");
- exit (1);
- }
-
- pthread_attr_t a;
-
- if (pthread_attr_init (&a) != 0)
- {
- puts ("attr_init failed");
- exit (1);
- }
-
- if (pthread_attr_setstacksize (&a, 1 * 1024 * 1024) != 0)
- {
- puts ("attr_setstacksize failed");
- return 1;
- }
-
- int r;
- for (r = 0; r < 10; ++r)
- {
- int i;
- for (i = 0; i < N; ++i)
- if (pthread_create (&th[i], &a, tf, cbs[i]) != 0)
- {
- puts ("pthread_create failed");
- exit (1);
- }
-
- nsigs = 0;
-
- pthread_barrier_wait (&b);
-
- sigset_t ss;
- sigemptyset (&ss);
- sigaddset (&ss, THE_SIG);
- if (pthread_sigmask (SIG_BLOCK, &ss, NULL) != 0)
- {
- puts ("pthread_sigmask failed");
- exit (1);
- }
-
- /* Start sending signals. */
- for (i = 0; i < TOTAL_SIGS; ++i)
- {
- if (kill (getpid (), THE_SIG) != 0)
- {
- puts ("kill failed");
- exit (1);
- }
-
- if (TEMP_FAILURE_RETRY (sem_wait (&s)) != 0)
- {
- puts ("sem_wait failed");
- exit (1);
- }
-
- ++nsigs;
- }
-
- pthread_barrier_wait (&b);
-
- if (pthread_sigmask (SIG_UNBLOCK, &ss, NULL) != 0)
- {
- puts ("pthread_sigmask failed");
- exit (1);
- }
-
- for (i = 0; i < N; ++i)
- if (pthread_join (th[i], NULL) != 0)
- {
- puts ("join failed");
- exit (1);
- }
- }
-
- if (pthread_attr_destroy (&a) != 0)
- {
- puts ("attr_destroy failed");
- exit (1);
- }
-
- return 0;
-#endif
-}
-
-
-#define TIMEOUT 5
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tls3mod.c b/test/nptl/tst-tls3mod.c
deleted file mode 100644
index 0fd326162..000000000
--- a/test/nptl/tst-tls3mod.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <pthreaddef.h>
-#include <tls.h>
-
-#if HAVE___THREAD
-
-static pthread_barrier_t* b = NULL;
-
-#define TOTAL_SIGS 1000
-static int* nsigs = NULL;
-
-static sem_t* s = NULL;
-
-static __thread void (*fp) (void);
-
-
-#define THE_SIG SIGUSR1
-void
-handler (int sig)
-{
- if (sig != THE_SIG)
- {
- write (STDOUT_FILENO, "wrong signal\n", 13);
- _exit (1);
- }
-
- fp ();
-
- if (sem_post (s) != 0)
- {
- write (STDOUT_FILENO, "sem_post failed\n", 16);
- _exit (1);
- }
-}
-
-void
-setup_tf (pthread_barrier_t* t_b, int* t_nsigs, sem_t* t_s)
-{
- b = t_b;
- nsigs = t_nsigs;
- s = t_s;
-}
-
-void *
-tf (void *arg)
-{
- if (!b || !s || !nsigs)
- {
- puts ("need to call setup_tf first");
- exit (1);
- }
-
- if ((uintptr_t) pthread_self () & (TCB_ALIGNMENT - 1))
- {
- puts ("thread's struct pthread not aligned enough");
- exit (1);
- }
-
- if (fp != NULL)
- {
- printf("fp=%p\n", (void *)&fp);
- puts ("fp not initially NULL");
- exit (1);
- }
-
- fp = arg;
-
- pthread_barrier_wait (b);
-
- pthread_barrier_wait (b);
-
- if (*nsigs != TOTAL_SIGS)
- {
- puts ("barrier_wait prematurely returns");
- exit (1);
- }
-
- return NULL;
-}
-
-#endif
diff --git a/test/nptl/tst-tls4.c b/test/nptl/tst-tls4.c
deleted file mode 100644
index 378b13aae..000000000
--- a/test/nptl/tst-tls4.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <dlfcn.h>
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <tls.h>
-
-#if HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE
-
-#define N 3
-
-void (*test1) (void), (*test2) (void);
-
-pthread_barrier_t b2, b3;
-
-static void *
-tf (void *arg)
-{
- int i;
-
- for (i = 0; i <= (uintptr_t) arg; ++i)
- {
- int r = pthread_barrier_wait (&b3);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: barrier_wait failed");
- exit (1);
- }
- }
-
- test1 ();
-
- for (i = 0; i < 3; ++i)
- {
- int r = pthread_barrier_wait (&b3);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: barrier_wait failed");
- exit (1);
- }
- }
-
- test2 ();
-
- for (i = 0; i < 3 - (uintptr_t) arg; ++i)
- {
- int r = pthread_barrier_wait (&b3);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf: barrier_wait failed");
- exit (1);
- }
- }
-
- return NULL;
-}
-
-static void *
-tf2 (void *arg)
-{
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("tf2: barrier_wait failed");
- exit (1);
- }
-
- int i;
- for (i = 0; i < N; ++i)
- tf (arg);
- return NULL;
-}
-
-int
-do_test (void)
-{
- pthread_t th[2];
- const char *modules[N]
- = { "tst-tls4moda.so", "tst-tls4moda.so", "tst-tls4modb.so" };
-
- if (pthread_barrier_init (&b2, NULL, 2) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_barrier_init (&b3, NULL, 3) != 0)
- {
- puts ("barrier_init failed");
- return 1;
- }
-
- if (pthread_create (&th[0], NULL, tf2, (void *) (uintptr_t) 1))
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- int r = pthread_barrier_wait (&b2);
- if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
- {
- puts ("barrier_wait failed");
- return 1;
- }
-
- int i;
- for (i = 0; i < N; ++i)
- {
- void *h = dlopen (modules[i], RTLD_LAZY);
- if (h == NULL)
- {
- printf ("dlopen failed %s\n", dlerror ());
- return 1;
- }
-
- test1 = dlsym (h, "test1");
- if (test1 == NULL)
- {
- printf ("dlsym for test1 failed %s\n", dlerror ());
- return 1;
- }
-
- test2 = dlsym (h, "test2");
- if (test2 == NULL)
- {
- printf ("dlsym for test2 failed %s\n", dlerror ());
- return 1;
- }
-
- if (pthread_create (&th[1], NULL, tf, (void *) (uintptr_t) 2))
- {
- puts ("pthread_create failed");
- return 1;
- }
-
- tf ((void *) (uintptr_t) 0);
-
- if (pthread_join (th[1], NULL) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (dlclose (h))
- {
- puts ("dlclose failed");
- return 1;
- }
-
- printf ("test %d with %s succeeded\n", i, modules[i]);
- }
-
- if (pthread_join (th[0], NULL) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- return 0;
-}
-
-#define TIMEOUT 5
-#define TEST_FUNCTION do_test ()
-
-#else
-
-#define TEST_FUNCTION 0
-
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tls4moda.c b/test/nptl/tst-tls4moda.c
deleted file mode 100644
index 9a59cf7a2..000000000
--- a/test/nptl/tst-tls4moda.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <tls.h>
-
-#if HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE
-
-static __thread unsigned char foo [32]
- __attribute__ ((tls_model ("initial-exec"), aligned (sizeof (void *))));
-
-void
-test1 (void)
-{
- size_t s;
-
- for (s = 0; s < sizeof (foo); ++s)
- {
- if (foo [s])
- abort ();
- foo [s] = s;
- }
-}
-
-void
-test2 (void)
-{
- size_t s;
-
- for (s = 0; s < sizeof (foo); ++s)
- {
- if (foo [s] != s)
- abort ();
- foo [s] = sizeof (foo) - s;
- }
-}
-
-#endif
diff --git a/test/nptl/tst-tls4modb.c b/test/nptl/tst-tls4modb.c
deleted file mode 100644
index 66044b2ed..000000000
--- a/test/nptl/tst-tls4modb.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <tls.h>
-
-#if HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE
-
-static int i;
-int bar;
-
-static __thread void *foo [32 / sizeof (void *)]
- __attribute__ ((tls_model ("initial-exec"), aligned (sizeof (void *))))
- = { &i, &bar };
-
-void
-test1 (void)
-{
- size_t s;
-
- if (foo [0] != &i || foo [1] != &bar)
- abort ();
-
- foo [0] = NULL;
- foo [1] = NULL;
- for (s = 0; s < sizeof (foo) / sizeof (void *); ++s)
- {
- if (foo [s])
- abort ();
- foo [s] = &foo[s];
- }
-}
-
-void
-test2 (void)
-{
- size_t s;
-
- for (s = 0; s < sizeof (foo) / sizeof (void *); ++s)
- {
- if (foo [s] != &foo [s])
- abort ();
- foo [s] = &foo [s ^ 1];
- }
-}
-
-#endif
diff --git a/test/nptl/tst-tls5.c b/test/nptl/tst-tls5.c
deleted file mode 100644
index c8afe6a87..000000000
--- a/test/nptl/tst-tls5.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Check alignment, overlapping and layout of TLS variables. */
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <pthread.h>
-#include <sys/param.h>
-
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-
-struct tls_obj tls_registry[64];
-
-static int
-tls_addr_cmp (const void *a, const void *b)
-{
- if (((struct tls_obj *)a)->addr < ((struct tls_obj *)b)->addr)
- return -1;
- if (((struct tls_obj *)a)->addr > ((struct tls_obj *)b)->addr)
- return 1;
- return 0;
-}
-
-static int
-do_test (void)
-{
- size_t cnt, i;
- int res = 0;
- uintptr_t min_addr = ~(uintptr_t) 0, max_addr = 0;
-
- for (cnt = 0; tls_registry[cnt].name; ++cnt);
- tls_registry[cnt].name = NULL;
- tls_registry[cnt].addr = (uintptr_t) pthread_self ();
- tls_registry[cnt].size = sizeof (struct pthread);
- tls_registry[cnt++].align = __alignof__ (struct pthread);
-
- qsort (tls_registry, cnt, sizeof (struct tls_obj), tls_addr_cmp);
-
- for (i = 0; i < cnt; ++i)
- {
- printf ("%s%s = %p, size %zd, align %zd",
- tls_registry[i].name ? "&" : "",
- tls_registry[i].name ?: "pthread_self ()",
- (void *) tls_registry[i].addr,
- tls_registry[i].size, tls_registry[i].align);
- if (tls_registry[i].addr & (tls_registry[i].align - 1))
- {
- fputs (", WRONG ALIGNMENT", stdout);
- res = 1;
- }
- if (i > 0
- && (tls_registry[i - 1].addr + tls_registry[i - 1].size
- > tls_registry[i].addr))
- {
- fputs (", ADDRESS OVERLAP", stdout);
- res = 1;
- }
- puts ("");
- if (tls_registry[i].name)
- {
- min_addr = MIN (tls_registry[i].addr, min_addr);
- max_addr = MAX (tls_registry[i].addr + tls_registry[i].size,
- max_addr);
- }
- }
-
- if (cnt > 1)
- {
-#if defined(TLS_TCB_AT_TP)
- if (tls_registry[cnt - 1].name)
- {
- puts ("pthread_self () not larger than all TLS addresses");
- res = 1;
- }
- else
- max_addr = MAX (tls_registry[cnt - 1].addr, max_addr);
-#elif defined(TLS_DTV_AT_TP)
- if (tls_registry[0].name)
- {
- puts ("pthread_self () not smaller than all TLS addresses");
- res = 1;
- }
-#else
- abort ();
-#endif
- printf ("Initial TLS used block size %zd\n",
- (size_t) (max_addr - min_addr));
- }
- return res;
-}
-
-#define TEST_FUNCTION do_test ()
-
-#else
-
-#define TEST_FUNCTION 0
-
-#endif
-
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tls5.h b/test/nptl/tst-tls5.h
deleted file mode 100644
index b7c14eb82..000000000
--- a/test/nptl/tst-tls5.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <stdint.h>
-#include <stdlib.h>
-#include <tls.h>
-
-#if USE_TLS && HAVE___THREAD
-
-struct tls_obj
-{
- const char *name;
- uintptr_t addr;
- size_t size;
- size_t align;
-};
-extern struct tls_obj tls_registry[];
-
-#define TLS_REGISTER(x) \
-static void __attribute__((constructor)) \
-tls_register_##x (void) \
-{ \
- size_t i; \
- for (i = 0; tls_registry[i].name; ++i); \
- tls_registry[i].name = #x; \
- tls_registry[i].addr = (uintptr_t) &x; \
- tls_registry[i].size = sizeof (x); \
- tls_registry[i].align = __alignof__ (x); \
-}
-
-#endif
diff --git a/test/nptl/tst-tls5mod.c b/test/nptl/tst-tls5mod.c
deleted file mode 100644
index 4616a20e9..000000000
--- a/test/nptl/tst-tls5mod.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-/* Ensure tls_registry is exported from the binary. */
-void *tst_tls5mod attribute_hidden = tls_registry;
-#endif
diff --git a/test/nptl/tst-tls5moda.c b/test/nptl/tst-tls5moda.c
deleted file mode 100644
index 4644d763a..000000000
--- a/test/nptl/tst-tls5moda.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-static __thread char a [32] __attribute__ ((aligned (64)));
-TLS_REGISTER (a)
-#endif
diff --git a/test/nptl/tst-tls5modb.c b/test/nptl/tst-tls5modb.c
deleted file mode 100644
index 09b439670..000000000
--- a/test/nptl/tst-tls5modb.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-static __thread int b;
-TLS_REGISTER (b)
-#endif
diff --git a/test/nptl/tst-tls5modc.c b/test/nptl/tst-tls5modc.c
deleted file mode 100644
index bbd89633d..000000000
--- a/test/nptl/tst-tls5modc.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-static __thread int c;
-TLS_REGISTER (c)
-#endif
diff --git a/test/nptl/tst-tls5modd.c b/test/nptl/tst-tls5modd.c
deleted file mode 100644
index 8b54d168c..000000000
--- a/test/nptl/tst-tls5modd.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-static __thread int d;
-TLS_REGISTER (d)
-#endif
diff --git a/test/nptl/tst-tls5mode.c b/test/nptl/tst-tls5mode.c
deleted file mode 100644
index d30b06752..000000000
--- a/test/nptl/tst-tls5mode.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-static __thread int e1 = 24;
-static __thread char e2 [32] __attribute__ ((aligned (64)));
-TLS_REGISTER (e1)
-TLS_REGISTER (e2)
-#endif
diff --git a/test/nptl/tst-tls5modf.c b/test/nptl/tst-tls5modf.c
deleted file mode 100644
index 52dcb9495..000000000
--- a/test/nptl/tst-tls5modf.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "tst-tls5.h"
-
-#ifdef TLS_REGISTER
-char tst_tls5modf[60] attribute_hidden = { 26 };
-static __thread int f1 = 24;
-static __thread char f2 [32] __attribute__ ((aligned (64)));
-TLS_REGISTER (f1)
-TLS_REGISTER (f2)
-#endif
diff --git a/test/nptl/tst-tsd1.c b/test/nptl/tst-tsd1.c
deleted file mode 100644
index af46d685b..000000000
--- a/test/nptl/tst-tsd1.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <string.h>
-
-
-static int
-do_test (void)
-{
- pthread_key_t key1;
- pthread_key_t key2;
- void *value;
- int result = 0;
- int err;
-
- err = pthread_key_create (&key1, NULL);
- if (err != 0)
- {
- printf ("1st key_create failed: %s\n", strerror (err));
- return 1;
- }
-
- /* Initial value must be NULL. */
- value = pthread_getspecific (key1);
- if (value != NULL)
- {
- puts ("1st getspecific != NULL");
- result = 1;
- }
-
- err = pthread_setspecific (key1, (void *) -2l);
- if (err != 0)
- {
- printf ("1st setspecific failed: %s\n", strerror (err));
- return 1;
- }
-
- value = pthread_getspecific (key1);
- if (value == NULL)
- {
- puts ("2nd getspecific == NULL\n");
- result = 1;
- }
- else if (value != (void *) -2l)
- {
- puts ("2nd getspecific != -2l\n");
- result = 1;
- }
-
- err = pthread_setspecific (key1, (void *) -3l);
- if (err != 0)
- {
- printf ("2nd setspecific failed: %s\n", strerror (err));
- return 1;
- }
-
- value = pthread_getspecific (key1);
- if (value == NULL)
- {
- puts ("3rd getspecific == NULL\n");
- result = 1;
- }
- else if (value != (void *) -3l)
- {
- puts ("3rd getspecific != -2l\n");
- result = 1;
- }
-
- err = pthread_key_delete (key1);
- if (err != 0)
- {
- printf ("key_delete failed: %s\n", strerror (err));
- result = 1;
- }
-
-
- err = pthread_key_create (&key2, NULL);
- if (err != 0)
- {
- printf ("2nd key_create failed: %s\n", strerror (err));
- return 1;
- }
-
- if (key1 != key2)
- puts ("key1 != key2; no more tests performed");
- else
- {
- value = pthread_getspecific (key2);
- if (value != NULL)
- {
- puts ("4th getspecific != NULL");
- result = 1;
- }
- }
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tsd2.c b/test/nptl/tst-tsd2.c
deleted file mode 100644
index 71e793fd4..000000000
--- a/test/nptl/tst-tsd2.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <string.h>
-
-
-static int result;
-
-
-static void
-destr (void *arg)
-{
- if (arg != (void *) -2l)
- result = 2;
- else
- result = 0;
-}
-
-
-static void *
-tf (void *arg)
-{
- pthread_key_t key = (pthread_key_t) (long int) arg;
- int err;
-
- err = pthread_setspecific (key, (void *) -2l);
- if (err != 0)
- result = 3;
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- pthread_key_t key;
- pthread_t th;
- int err;
-
- err = pthread_key_create (&key, destr);
- if (err != 0)
- {
- printf ("key_create failed: %s\n", strerror (err));
- return 1;
- }
-
- result = 1;
-
- err = pthread_create (&th, NULL, tf, (void *) (long int) key);
- if (err != 0)
- {
- printf ("create failed: %s\n", strerror (err));
- return 1;
- }
-
- /* Wait for the thread to terminate. */
- err = pthread_join (th, NULL);
- if (err != 0)
- {
- printf ("join failed: %s\n", strerror (err));
- return 1;
- }
-
- if (result == 1)
- puts ("destructor not called");
- else if (result == 2)
- puts ("destructor got passed a wrong value");
- else if (result == 3)
- puts ("setspecific in child failed");
- else if (result != 0)
- puts ("result != 0");
-
- return result;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tsd3.c b/test/nptl/tst-tsd3.c
deleted file mode 100644
index 4dc46f2a8..000000000
--- a/test/nptl/tst-tsd3.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <limits.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static pthread_key_t key1;
-static pthread_key_t key2;
-
-
-static int left;
-
-
-static void
-destr1 (void *arg)
-{
- if (--left > 0)
- {
- puts ("set key2");
-
- if (pthread_setspecific (key2, (void *) 1l) != 0)
- {
- puts ("destr1: setspecific failed");
- exit (1);
- }
- }
-}
-
-
-static void
-destr2 (void *arg)
-{
- if (--left > 0)
- {
- puts ("set key1");
-
- if (pthread_setspecific (key1, (void *) 1l) != 0)
- {
- puts ("destr2: setspecific failed");
- exit (1);
- }
- }
-}
-
-
-static void *
-tf (void *arg)
-{
- /* Let the destructors work. */
- left = 7;
-
- if (pthread_setspecific (key1, (void *) 1l) != 0
- || pthread_setspecific (key2, (void *) 1l) != 0)
- {
- puts ("tf: setspecific failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-static int
-do_test (void)
-{
- /* Allocate two keys, both with destructors. */
- if (pthread_key_create (&key1, destr1) != 0
- || pthread_key_create (&key2, destr2) != 0)
- {
- puts ("key_create failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (left != 0)
- {
- printf ("left == %d\n", left);
- return 1;
- }
-
- if (pthread_getspecific (key1) != NULL)
- {
- puts ("key1 data != NULL");
- return 1;
- }
- if (pthread_getspecific (key2) != NULL)
- {
- puts ("key2 data != NULL");
- return 1;
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tsd4.c b/test/nptl/tst-tsd4.c
deleted file mode 100644
index cf58d8581..000000000
--- a/test/nptl/tst-tsd4.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <limits.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-
-static pthread_key_t key;
-
-
-static int rounds;
-
-
-static void
-destr (void *arg)
-{
- ++rounds;
-
- if (pthread_setspecific (key, (void *) 1l) != 0)
- {
- puts ("destr: setspecific failed");
- exit (1);
- }
-}
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_setspecific (key, (void *) 1l) != 0)
- {
- puts ("tf: setspecific failed");
- exit (1);
- }
-
- return NULL;
-}
-
-
-/* This test check non-standard behavior. The standard does not
- require that the implementation has to stop calling TSD destructors
- when they are set over and over again. But NPTL does. */
-static int
-do_test (void)
-{
- /* Allocate two keys, both with destructors. */
- if (pthread_key_create (&key, destr) != 0)
- {
- puts ("key_create failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- if (pthread_join (th, NULL) != 0)
- {
- puts ("join failed");
- return 1;
- }
-
- if (rounds < PTHREAD_DESTRUCTOR_ITERATIONS)
- {
- printf ("rounds == %d, PTHREAD_DESTRUCTOR_ITERATIONS = %d\n",
- rounds, PTHREAD_DESTRUCTOR_ITERATIONS);
- return 1;
- }
-
- if (pthread_getspecific (key) != NULL)
- {
- puts ("key data != NULL");
- return 1;
- }
-
- return 0;
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tsd5.c b/test/nptl/tst-tsd5.c
deleted file mode 100644
index 8fc7b35ef..000000000
--- a/test/nptl/tst-tsd5.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
-
-
-static void
-cl (void *p)
-{
- pthread_mutex_unlock (&m);
-}
-
-
-static void *
-tf (void *arg)
-{
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("2nd mutex_lock failed");
- exit (1);
- }
-
- exit (0);
-}
-
-
-static int
-do_test (void)
-{
- pthread_key_t k;
- if (pthread_key_create (&k, cl) != 0)
- {
- puts ("key_create failed");
- return 1;
- }
- if (pthread_setspecific (k, (void *) 1) != 0)
- {
- puts ("setspecific failed");
- return 1;
- }
-
- if (pthread_mutex_lock (&m) != 0)
- {
- puts ("1st mutex_lock failed");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("create failed");
- return 1;
- }
-
- pthread_exit (NULL);
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-tsd6.c b/test/nptl/tst-tsd6.c
deleted file mode 100644
index debb1dd36..000000000
--- a/test/nptl/tst-tsd6.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/wait.h>
-
-#define NKEYS 100
-static pthread_key_t keys[NKEYS];
-static pthread_barrier_t b;
-
-
-static void *
-tf (void *arg)
-{
- void *res = NULL;
- for (int i = 0; i < NKEYS; ++i)
- {
- void *p = pthread_getspecific (keys[i]);
- pthread_setspecific (keys[i], (void *) 7);
- if (p != NULL)
- res = p;
- }
- if (arg != NULL)
- {
- pthread_barrier_wait (arg);
- pthread_barrier_wait (arg);
- }
- return res;
-}
-
-
-static int
-do_test (void)
-{
- pthread_barrier_init (&b, NULL, 2);
-
- for (int i = 0; i < NKEYS; ++i)
- if (pthread_key_create (&keys[i], NULL) != 0)
- {
- puts ("cannot create keys");
- return 1;
- }
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, &b) != 0)
- {
- puts ("cannot create thread in parent");
- return 1;
- }
-
- pthread_barrier_wait (&b);
-
- pid_t pid = fork ();
- if (pid == 0)
- {
- if (pthread_create (&th, NULL, tf, NULL) != 0)
- {
- puts ("cannot create thread in child");
- exit (1);
- }
-
- void *res;
- pthread_join (th, &res);
-
- exit (res != NULL);
- }
- else if (pid == -1)
- {
- puts ("cannot create child process");
- return 1;
- }
-
- int s;
- if (TEMP_FAILURE_RETRY (waitpid (pid, &s, 0)) != pid)
- {
- puts ("failing to wait for child process");
- return 1;
- }
-
- pthread_barrier_wait (&b);
- pthread_join (th, NULL);
-
- return !WIFEXITED (s) ? 2 : WEXITSTATUS (s);
-}
-
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-typesizes.c b/test/nptl/tst-typesizes.c
deleted file mode 100644
index 59e948527..000000000
--- a/test/nptl/tst-typesizes.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2005.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <pthreadP.h>
-#include <semaphore.h>
-
-static const struct
-{
- const char *name;
- size_t expected;
- size_t is;
-} types[] =
- {
-#define T(t, c) \
- { #t, c, sizeof (t) }
- T (pthread_attr_t, __SIZEOF_PTHREAD_ATTR_T),
- T (pthread_mutex_t, __SIZEOF_PTHREAD_MUTEX_T),
- T (pthread_mutexattr_t, __SIZEOF_PTHREAD_MUTEXATTR_T),
- T (pthread_cond_t, __SIZEOF_PTHREAD_COND_T),
- T (pthread_condattr_t, __SIZEOF_PTHREAD_CONDATTR_T),
- T (pthread_rwlock_t, __SIZEOF_PTHREAD_RWLOCK_T),
- T (pthread_rwlockattr_t, __SIZEOF_PTHREAD_RWLOCKATTR_T),
- T (pthread_barrier_t, __SIZEOF_PTHREAD_BARRIER_T),
- T (pthread_barrierattr_t, __SIZEOF_PTHREAD_BARRIERATTR_T)
- };
-
-static int
-do_test (void)
-{
- int result = 0;
-
-#define TEST_TYPE(name) \
- printf ("%s: ", #name); \
- if (sizeof (name) != sizeof (((name *) 0)->__size)) \
- { \
- printf ("expected %zu, is %zu\n", \
- sizeof (((name *) 0)->__size), sizeof (name)); \
- result = 1; \
- } \
- else \
- puts ("OK")
-
- TEST_TYPE (pthread_mutex_t);
- TEST_TYPE (pthread_cond_t);
- TEST_TYPE (pthread_rwlock_t);
-
-#define TEST_TYPE2(name, internal) \
- printf ("%s: ", #name); \
- if (sizeof (((name *) 0)->__size) < sizeof (internal)) \
- { \
- printf ("expected %zu, is %zu\n", \
- sizeof (((name *) 0)->__size), sizeof (internal)); \
- result = 1; \
- } \
- else \
- puts ("OK")
-
- TEST_TYPE2 (pthread_attr_t, struct pthread_attr);
- TEST_TYPE2 (pthread_mutexattr_t, struct pthread_mutexattr);
- TEST_TYPE2 (pthread_condattr_t, struct pthread_condattr);
- TEST_TYPE2 (pthread_rwlockattr_t, struct pthread_rwlockattr);
- TEST_TYPE2 (pthread_barrier_t, struct pthread_barrier);
- TEST_TYPE2 (pthread_barrierattr_t, struct pthread_barrierattr);
- TEST_TYPE2 (sem_t, struct new_sem);
- TEST_TYPE2 (sem_t, struct old_sem);
-
- for (size_t i = 0; i < sizeof (types) / sizeof (types[0]); ++i)
- if (types[i].expected != types[i].is)
- {
- printf ("%s: expected %zu, is %zu\n",
- types[i].name, types[i].expected, types[i].is);
- result = 1;
- }
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-umask1.c b/test/nptl/tst-umask1.c
deleted file mode 100644
index 65b4df35b..000000000
--- a/test/nptl/tst-umask1.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <fcntl.h>
-#include <pthread.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-
-static struct
-{
- int (*fp) (const char *, mode_t);
- const char *name;
- bool is_fd;
-} fcts[] =
-{
- { creat, "creat", true },
- { mkdir, "mkdir", false },
- { mkfifo, "mkfifo", false },
-};
-#define nfcts (sizeof (fcts) / sizeof (fcts[0]))
-
-
-static int
-work (const char *fname, int mask)
-{
- int result = 0;
- size_t i;
- for (i = 0; i < nfcts; ++i)
- {
- remove (fname);
- int fd = fcts[i].fp (fname, 0777);
- if (fd == -1)
- {
- printf ("cannot %s %s: %m\n", fcts[i].name, fname);
- exit (1);
- }
- if (fcts[i].is_fd)
- close (fd);
- struct stat st;
- if (stat (fname, &st) == -1)
- {
- printf ("cannot stat %s after %s: %m\n", fname, fcts[i].name);
- exit (1);
- }
-
- if ((st.st_mode & mask) != 0)
- {
- printf ("mask not successful after %s: %x still set\n",
- fcts[i].name, (unsigned int) (st.st_mode & mask));
- result = 1;
- }
- }
-
- return result;
-}
-
-
-static pthread_barrier_t bar;
-
-
-static void *
-tf (void *arg)
-{
- pthread_barrier_wait (&bar);
-
- int result = work (arg, 022);
-
- pthread_barrier_wait (&bar);
-
- pthread_barrier_wait (&bar);
-
- return (work (arg, 0) | result) ? (void *) -1l : NULL;
-}
-
-
-static int
-do_test (const char *fname)
-{
- int result = 0;
-
- umask (0);
- result |= work (fname, 0);
-
- pthread_barrier_init (&bar, NULL, 2);
-
- pthread_t th;
- if (pthread_create (&th, NULL, tf, (void *) fname) != 0)
- {
- puts ("cannot create thread");
- exit (1);
- }
-
- umask (022);
- result |= work (fname, 022);
-
- pthread_barrier_wait (&bar);
-
- pthread_barrier_wait (&bar);
-
- umask (0);
-
- pthread_barrier_wait (&bar);
-
- void *res;
- if (pthread_join (th, &res) != 0)
- {
- puts ("join failed");
- exit (1);
- }
-
- remove (fname);
-
- return result || res != NULL;
-}
-
-#define TEST_FUNCTION do_test (argc < 2 ? "/tmp/tst-umask.tmp" : argv[1])
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-unload.c b/test/nptl/tst-unload.c
deleted file mode 100644
index 74a714ecb..000000000
--- a/test/nptl/tst-unload.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Tests for non-unloading of libpthread.
- Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <dlfcn.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-static int
-do_test (void)
-{
- void *p = dlopen ("libpthread.so.1", RTLD_LAZY);
-
- if (p == NULL)
- {
- puts ("failed to load libpthread.so.1");
- return 1;
- }
-
- if (dlclose (p) != 0)
- {
- puts ("dlclose (libpthread.so.1) failed");
- return 1;
- }
-
- puts ("seems to work");
-
- return 0;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-vfork1.c b/test/nptl/tst-vfork1.c
deleted file mode 100644
index b3c9d207d..000000000
--- a/test/nptl/tst-vfork1.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Test for vfork functions.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-/* This test relies on non-POSIX functionality since the child
- processes call write and getpid. */
-static int
-do_test (void)
-{
- int result = 0;
- int fd[2];
-
- if (pipe (fd) == -1)
- {
- puts ("pipe failed");
- return 1;
- }
-
- /* First vfork() without previous getpid(). */
- pid_t p1;
- if ((p1 = vfork ()) == 0)
- {
- pid_t p = getpid ();
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("1st vfork failed");
- result = 1;
- }
-
- pid_t p2 = 0;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p2, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("1st read failed");
- result = 1;
- }
- int r;
- if (TEMP_FAILURE_RETRY (waitpid (p1, &r, 0)) != p1)
- {
- puts ("1st waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 1st child failed");
- result = 1;
- }
-
- /* Main process' ID. */
- pid_t p0 = getpid ();
-
- /* vfork() again, but after a getpid() in the main process. */
- pid_t p3;
- if ((p3 = vfork ()) == 0)
- {
- pid_t p = getpid ();
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("2nd vfork failed");
- result = 1;
- }
-
- pid_t p4;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p4, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("2nd read failed");
- result = 1;
- }
- if (TEMP_FAILURE_RETRY (waitpid (p3, &r, 0)) != p3)
- {
- puts ("2nd waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 2nd child failed");
- result = 1;
- }
-
- /* And getpid in the main process again. */
- pid_t p5 = getpid ();
-
- /* Analysis of the results. */
- if (p0 != p5)
- {
- printf ("p0(%ld) != p5(%ld)\n", (long int) p0, (long int) p5);
- result = 1;
- }
-
- if (p0 == p1)
- {
- printf ("p0(%ld) == p1(%ld)\n", (long int) p0, (long int) p1);
- result = 1;
- }
-
- if (p1 != p2)
- {
- printf ("p1(%ld) != p2(%ld)\n", (long int) p1, (long int) p2);
- result = 1;
- }
-
- if (p0 == p3)
- {
- printf ("p0(%ld) == p3(%ld)\n", (long int) p0, (long int) p3);
- result = 1;
- }
-
- if (p3 != p4)
- {
- printf ("p3(%ld) != p4(%ld)\n", (long int) p3, (long int) p4);
- result = 1;
- }
-
- close (fd[0]);
- close (fd[1]);
-
- if (result == 0)
- puts ("All OK");
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-vfork1x.c b/test/nptl/tst-vfork1x.c
deleted file mode 100644
index b3c9d207d..000000000
--- a/test/nptl/tst-vfork1x.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Test for vfork functions.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-/* This test relies on non-POSIX functionality since the child
- processes call write and getpid. */
-static int
-do_test (void)
-{
- int result = 0;
- int fd[2];
-
- if (pipe (fd) == -1)
- {
- puts ("pipe failed");
- return 1;
- }
-
- /* First vfork() without previous getpid(). */
- pid_t p1;
- if ((p1 = vfork ()) == 0)
- {
- pid_t p = getpid ();
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("1st vfork failed");
- result = 1;
- }
-
- pid_t p2 = 0;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p2, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("1st read failed");
- result = 1;
- }
- int r;
- if (TEMP_FAILURE_RETRY (waitpid (p1, &r, 0)) != p1)
- {
- puts ("1st waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 1st child failed");
- result = 1;
- }
-
- /* Main process' ID. */
- pid_t p0 = getpid ();
-
- /* vfork() again, but after a getpid() in the main process. */
- pid_t p3;
- if ((p3 = vfork ()) == 0)
- {
- pid_t p = getpid ();
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("2nd vfork failed");
- result = 1;
- }
-
- pid_t p4;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p4, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("2nd read failed");
- result = 1;
- }
- if (TEMP_FAILURE_RETRY (waitpid (p3, &r, 0)) != p3)
- {
- puts ("2nd waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 2nd child failed");
- result = 1;
- }
-
- /* And getpid in the main process again. */
- pid_t p5 = getpid ();
-
- /* Analysis of the results. */
- if (p0 != p5)
- {
- printf ("p0(%ld) != p5(%ld)\n", (long int) p0, (long int) p5);
- result = 1;
- }
-
- if (p0 == p1)
- {
- printf ("p0(%ld) == p1(%ld)\n", (long int) p0, (long int) p1);
- result = 1;
- }
-
- if (p1 != p2)
- {
- printf ("p1(%ld) != p2(%ld)\n", (long int) p1, (long int) p2);
- result = 1;
- }
-
- if (p0 == p3)
- {
- printf ("p0(%ld) == p3(%ld)\n", (long int) p0, (long int) p3);
- result = 1;
- }
-
- if (p3 != p4)
- {
- printf ("p3(%ld) != p4(%ld)\n", (long int) p3, (long int) p4);
- result = 1;
- }
-
- close (fd[0]);
- close (fd[1]);
-
- if (result == 0)
- puts ("All OK");
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-vfork2.c b/test/nptl/tst-vfork2.c
deleted file mode 100644
index 6b2d98bac..000000000
--- a/test/nptl/tst-vfork2.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* Test for vfork functions.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-int raise_fail;
-
-static void
-alrm (int sig)
-{
- if (raise (SIGUSR1) < 0)
- raise_fail = 1;
-}
-
-/* This test relies on non-POSIX functionality since the child
- processes call write, nanosleep and getpid. */
-static int
-do_test (void)
-{
- int result = 0;
- int fd[2];
-
- signal (SIGUSR1, SIG_IGN);
-
- struct sigaction sa;
- sa.sa_handler = alrm;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction (SIGALRM, &sa, NULL) < 0)
- {
- puts ("couldn't set up SIGALRM handler");
- return 1;
- }
-
- if (pipe (fd) == -1)
- {
- puts ("pipe failed");
- return 1;
- }
-
- struct itimerval it;
- it.it_value.tv_sec = 0;
- it.it_value.tv_usec = 200 * 1000;
- it.it_interval = it.it_value;
- if (setitimer (ITIMER_REAL, &it, NULL) < 0)
- {
- puts ("couldn't set up timer");
- return 1;
- }
-
- /* First vfork() without previous getpid(). */
- pid_t p1;
- if ((p1 = vfork ()) == 0)
- {
- pid_t p = getpid ();
-
- struct timespec ts;
- ts.tv_sec = 1;
- ts.tv_nsec = 0;
- TEMP_FAILURE_RETRY (nanosleep (&ts, &ts));
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("1st vfork failed");
- result = 1;
- }
-
- memset (&it, 0, sizeof (it));
- setitimer (ITIMER_REAL, &it, NULL);
-
- pid_t p2 = 0;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p2, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("1st read failed");
- result = 1;
- }
- int r;
- if (TEMP_FAILURE_RETRY (waitpid (p1, &r, 0)) != p1)
- {
- puts ("1st waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 1st child failed");
- result = 1;
- }
-
- /* Main process' ID. */
- pid_t p0 = getpid ();
-
- /* vfork() again, but after a getpid() in the main process. */
- pid_t p3;
- if ((p3 = vfork ()) == 0)
- {
- pid_t p = getpid ();
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("2nd vfork failed");
- result = 1;
- }
-
- pid_t p4;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p4, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("2nd read failed");
- result = 1;
- }
- if (TEMP_FAILURE_RETRY (waitpid (p3, &r, 0)) != p3)
- {
- puts ("2nd waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 2nd child failed");
- result = 1;
- }
-
- /* And getpid in the main process again. */
- pid_t p5 = getpid ();
-
- /* Analysis of the results. */
- if (p0 != p5)
- {
- printf ("p0(%ld) != p5(%ld)\n", (long int) p0, (long int) p5);
- result = 1;
- }
-
- if (p0 == p1)
- {
- printf ("p0(%ld) == p1(%ld)\n", (long int) p0, (long int) p1);
- result = 1;
- }
-
- if (p1 != p2)
- {
- printf ("p1(%ld) != p2(%ld)\n", (long int) p1, (long int) p2);
- result = 1;
- }
-
- if (p0 == p3)
- {
- printf ("p0(%ld) == p3(%ld)\n", (long int) p0, (long int) p3);
- result = 1;
- }
-
- if (p3 != p4)
- {
- printf ("p3(%ld) != p4(%ld)\n", (long int) p3, (long int) p4);
- result = 1;
- }
-
- close (fd[0]);
- close (fd[1]);
-
- if (raise_fail)
- {
- puts ("raise failed");
- result = 1;
- }
-
- if (result == 0)
- puts ("All OK");
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/test/nptl/tst-vfork2x.c b/test/nptl/tst-vfork2x.c
deleted file mode 100644
index 6b2d98bac..000000000
--- a/test/nptl/tst-vfork2x.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/* Test for vfork functions.
- Copyright (C) 2004 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-int raise_fail;
-
-static void
-alrm (int sig)
-{
- if (raise (SIGUSR1) < 0)
- raise_fail = 1;
-}
-
-/* This test relies on non-POSIX functionality since the child
- processes call write, nanosleep and getpid. */
-static int
-do_test (void)
-{
- int result = 0;
- int fd[2];
-
- signal (SIGUSR1, SIG_IGN);
-
- struct sigaction sa;
- sa.sa_handler = alrm;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = 0;
- if (sigaction (SIGALRM, &sa, NULL) < 0)
- {
- puts ("couldn't set up SIGALRM handler");
- return 1;
- }
-
- if (pipe (fd) == -1)
- {
- puts ("pipe failed");
- return 1;
- }
-
- struct itimerval it;
- it.it_value.tv_sec = 0;
- it.it_value.tv_usec = 200 * 1000;
- it.it_interval = it.it_value;
- if (setitimer (ITIMER_REAL, &it, NULL) < 0)
- {
- puts ("couldn't set up timer");
- return 1;
- }
-
- /* First vfork() without previous getpid(). */
- pid_t p1;
- if ((p1 = vfork ()) == 0)
- {
- pid_t p = getpid ();
-
- struct timespec ts;
- ts.tv_sec = 1;
- ts.tv_nsec = 0;
- TEMP_FAILURE_RETRY (nanosleep (&ts, &ts));
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("1st vfork failed");
- result = 1;
- }
-
- memset (&it, 0, sizeof (it));
- setitimer (ITIMER_REAL, &it, NULL);
-
- pid_t p2 = 0;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p2, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("1st read failed");
- result = 1;
- }
- int r;
- if (TEMP_FAILURE_RETRY (waitpid (p1, &r, 0)) != p1)
- {
- puts ("1st waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 1st child failed");
- result = 1;
- }
-
- /* Main process' ID. */
- pid_t p0 = getpid ();
-
- /* vfork() again, but after a getpid() in the main process. */
- pid_t p3;
- if ((p3 = vfork ()) == 0)
- {
- pid_t p = getpid ();
- _exit (TEMP_FAILURE_RETRY (write (fd[1], &p, sizeof (p))) != sizeof (p));
- }
- else if (p1 == -1)
- {
- puts ("2nd vfork failed");
- result = 1;
- }
-
- pid_t p4;
- if (TEMP_FAILURE_RETRY (read (fd[0], &p4, sizeof (pid_t))) != sizeof (pid_t))
- {
- puts ("2nd read failed");
- result = 1;
- }
- if (TEMP_FAILURE_RETRY (waitpid (p3, &r, 0)) != p3)
- {
- puts ("2nd waitpid failed");
- result = 1;
- }
- else if (r != 0)
- {
- puts ("write in 2nd child failed");
- result = 1;
- }
-
- /* And getpid in the main process again. */
- pid_t p5 = getpid ();
-
- /* Analysis of the results. */
- if (p0 != p5)
- {
- printf ("p0(%ld) != p5(%ld)\n", (long int) p0, (long int) p5);
- result = 1;
- }
-
- if (p0 == p1)
- {
- printf ("p0(%ld) == p1(%ld)\n", (long int) p0, (long int) p1);
- result = 1;
- }
-
- if (p1 != p2)
- {
- printf ("p1(%ld) != p2(%ld)\n", (long int) p1, (long int) p2);
- result = 1;
- }
-
- if (p0 == p3)
- {
- printf ("p0(%ld) == p3(%ld)\n", (long int) p0, (long int) p3);
- result = 1;
- }
-
- if (p3 != p4)
- {
- printf ("p3(%ld) != p4(%ld)\n", (long int) p3, (long int) p4);
- result = 1;
- }
-
- close (fd[0]);
- close (fd[1]);
-
- if (raise_fail)
- {
- puts ("raise failed");
- result = 1;
- }
-
- if (result == 0)
- puts ("All OK");
-
- return result;
-}
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"