Blame nptl/tst-exit3.c

Packit Service 82fcde
#include <pthread.h>
Packit Service 82fcde
#include <signal.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <stdlib.h>
Packit Service 82fcde
#include <string.h>
Packit Service 82fcde
#include <unistd.h>
Packit Service 82fcde
Packit Service 82fcde
static int do_test (void);
Packit Service 82fcde
Packit Service 82fcde
#define TEST_FUNCTION do_test ()
Packit Service 82fcde
#include "../test-skeleton.c"
Packit Service 82fcde
Packit Service 82fcde
static pthread_barrier_t b;
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
static void *
Packit Service 82fcde
tf2 (void *arg)
Packit Service 82fcde
{
Packit Service 82fcde
  while (1)
Packit Service 82fcde
    sleep (100);
Packit Service 82fcde
Packit Service 82fcde
  /* NOTREACHED */
Packit Service 82fcde
  return NULL;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
static void *
Packit Service 82fcde
tf (void *arg)
Packit Service 82fcde
{
Packit Service 82fcde
  pthread_t th;
Packit Service 82fcde
Packit Service 82fcde
  int e = pthread_barrier_wait (&b);
Packit Service 82fcde
  if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("barrier_wait failed");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  e = pthread_create (&th, NULL, tf2, NULL);
Packit Service 82fcde
  if (e != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("create failed: %s\n", strerror (e));
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  /* Terminate only this thread.  */
Packit Service 82fcde
  return NULL;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
static int
Packit Service 82fcde
do_test (void)
Packit Service 82fcde
{
Packit Service 82fcde
  pthread_t th;
Packit Service 82fcde
Packit Service 82fcde
  if (pthread_barrier_init (&b, NULL, 2) != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("barrier_init failed");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  int e = pthread_create (&th, NULL, tf, NULL);
Packit Service 82fcde
  if (e != 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("create failed: %s\n", strerror (e));
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  e = pthread_barrier_wait (&b);
Packit Service 82fcde
  if (e != 0 && e != PTHREAD_BARRIER_SERIAL_THREAD)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("barrier_wait failed");
Packit Service 82fcde
      exit (1);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  delayed_exit (3);
Packit Service 82fcde
Packit Service 82fcde
  /* Terminate only this thread.  */
Packit Service 82fcde
  pthread_exit (NULL);
Packit Service 82fcde
Packit Service 82fcde
  /* NOTREACHED */
Packit Service 82fcde
  return 1;
Packit Service 82fcde
}