hjl / source-git / glibc

Forked from source-git/glibc 3 years ago
Clone

Blame nptl/tst-exit3.c

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