diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2005-11-21 04:48:19 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2005-11-21 04:48:19 +0000 |
commit | 33362918bffa49495556d4f1eb5fc4e5a0808398 (patch) | |
tree | c6c154eb0da40a03d2ddb5bdb5c6b0bd62695aba /sim/testsuite/sim/cris/c/thread4.c | |
parent | 4e1c23a559814a39fc0278a1a8e8ef70a1eaa055 (diff) | |
download | gdb-33362918bffa49495556d4f1eb5fc4e5a0808398.tar.gz |
* sim/cris: New directory with C and assembly tests for the CRIS
simulator.
Diffstat (limited to 'sim/testsuite/sim/cris/c/thread4.c')
-rw-r--r-- | sim/testsuite/sim/cris/c/thread4.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/sim/testsuite/sim/cris/c/thread4.c b/sim/testsuite/sim/cris/c/thread4.c new file mode 100644 index 00000000000..cfa23279c50 --- /dev/null +++ b/sim/testsuite/sim/cris/c/thread4.c @@ -0,0 +1,50 @@ +/* Compiler options: +#notarget: cris*-*-elf +#cc: additional_flags=-pthread +#output: abb ok\n + + Testing a pthread corner case. Output will change with glibc + releases. */ + +#include <stddef.h> +#include <stdio.h> +#include <unistd.h> +#include <pthread.h> +#include <stdlib.h> + +static void * +process (void *arg) +{ + int i; + + if (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) != 0) + abort (); + write (2, "a", 1); + for (i = 0; i < 10; i++) + { + sched_yield (); + pthread_testcancel (); + write (2, "b", 1); + } + return NULL; +} + +int +main (void) +{ + int retcode; + pthread_t th_a; + void *retval; + + retcode = pthread_create (&th_a, NULL, process, NULL); + sched_yield (); + sched_yield (); + sched_yield (); + sched_yield (); + retcode = pthread_cancel (th_a); + retcode = pthread_join (th_a, &retval); + if (retcode != 0) + abort (); + fprintf (stderr, " ok\n"); + return 0; +} |