1/* Compiler options:
2#notarget: cris*-*-elf
3#cc: additional_flags=-pthread
4#output: abb ok\n
5
6   Testing a pthread corner case.  Output will change with glibc
7   releases.  */
8
9#include <stddef.h>
10#include <stdio.h>
11#include <unistd.h>
12#include <pthread.h>
13#include <stdlib.h>
14
15static void *
16process (void *arg)
17{
18  int i;
19
20  if (pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL) != 0)
21    abort ();
22  write (2, "a", 1);
23  for (i = 0; i < 10; i++)
24    {
25      sched_yield ();
26      pthread_testcancel ();
27      write (2, "b", 1);
28    }
29  return NULL;
30}
31
32int
33main (void)
34{
35  int retcode;
36  pthread_t th_a;
37  void *retval;
38
39  retcode = pthread_create (&th_a, NULL, process, NULL);
40  sched_yield ();
41  sched_yield ();
42  sched_yield ();
43  sched_yield ();
44  retcode = pthread_cancel (th_a);
45  retcode = pthread_join (th_a, &retval);
46  if (retcode != 0)
47    abort ();
48  fprintf (stderr, " ok\n");
49  return 0;
50}
51