aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linuxthreads/ChangeLog1
-rw-r--r--linuxthreads/joinrace.c48
2 files changed, 49 insertions, 0 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index faf2c43df6..88c866c77f 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -7,6 +7,7 @@
* join.c (pthread_join): Use nonexisting_handle instead of
invalid_handle to test for acceptable thread handle.
* manager.c (pthread_handle_free): Likewise.
+ * joinrace.c: New file.
Reported by Permaine Cheung <pcheung@cygnus.com>.
2000-06-08 Ulrich Drepper <drepper@redhat.com>
diff --git a/linuxthreads/joinrace.c b/linuxthreads/joinrace.c
new file mode 100644
index 0000000000..0a00355d59
--- /dev/null
+++ b/linuxthreads/joinrace.c
@@ -0,0 +1,48 @@
+/* Test case by Permaine Cheung <pcheung@cygnus.com>. */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void *
+sub1 (void *arg)
+{
+ /* Nothing. */
+ return NULL;
+}
+
+int
+main (void)
+{
+ int istatus;
+ int policy;
+ int cnt;
+ pthread_t thread1;
+ struct sched_param spresult1, sp1;
+
+ for (cnt = 0; cnt < 100; ++cnt)
+ {
+ printf ("Round %d\n", cnt);
+
+ pthread_create (&thread1, NULL, &sub1, NULL);
+ pthread_join (thread1, NULL);
+
+ istatus = pthread_getschedparam (thread1, &policy, &spresult1);
+ if (istatus != ESRCH)
+ {
+ printf ("pthread_getschedparam returns: %d\n", istatus);
+ return 1;
+ }
+
+ sp1.sched_priority = 0;
+ istatus = pthread_setschedparam (thread1, SCHED_OTHER, &sp1);
+ if (istatus != ESRCH)
+ {
+ printf ("pthread_setschedparam returns: %d\n", istatus);
+ return 2;
+ }
+ }
+
+ return 0;
+}