Back to index

glibc  2.9
Defines | Functions | Variables
tst-eintr2.c File Reference
#include <errno.h>
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include "eintr.c"
#include "../test-skeleton.c"

Go to the source code of this file.

Defines

#define EXPECTED_SIGNAL   SIGALRM
#define TIMEOUT   3
#define TEST_FUNCTION   do_test ()

Functions

static void * tf1 (void *arg)
static void * tf2 (void *arg)
static int do_test (void)

Variables

static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER
static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER

Define Documentation

#define EXPECTED_SIGNAL   SIGALRM

Definition at line 115 of file tst-eintr2.c.

#define TEST_FUNCTION   do_test ()

Definition at line 117 of file tst-eintr2.c.

#define TIMEOUT   3

Definition at line 116 of file tst-eintr2.c.


Function Documentation

static int do_test ( void  ) [static]

Definition at line 79 of file tst-eintr2.c.

{
  if (pthread_mutex_lock (&m1) != 0)
    {
      puts ("mutex_lock failed");
      exit (1);
    }

  setup_eintr (SIGUSR1, NULL);

  pthread_t th;
  char buf[100];
  int e = pthread_create (&th, NULL, tf1, NULL);
  if (e != 0)
    {
      printf ("main: 1st pthread_create failed: %s\n",
             strerror_r (e, buf, sizeof (buf)));
      exit (1);
    }

  e = pthread_create (&th, NULL, tf2, NULL);
  if (e != 0)
    {
      printf ("main: 2nd pthread_create failed: %s\n",
             strerror_r (e, buf, sizeof (buf)));
      exit (1);
    }

  /* This call must never return.  */
  e = pthread_mutex_lock (&m1);
  printf ("main: mutex_lock returned: %s\n",
         strerror_r (e, buf, sizeof (buf)));

  return 1;
}

Here is the call graph for this function:

static void* tf1 ( void *  arg) [static]

Definition at line 36 of file tst-eintr2.c.

{
  struct timespec ts;
  struct timeval tv;

  gettimeofday (&tv, NULL);
  TIMEVAL_TO_TIMESPEC (&tv, &ts);
  ts.tv_sec += 10000;

  /* This call must never return.  */
  int e = pthread_mutex_timedlock (&m1, &ts);
  char buf[100];
  printf ("tf1: mutex_timedlock returned: %s\n",
         strerror_r (e, buf, sizeof (buf)));

  exit (1);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void* tf2 ( void *  arg) [static]

Definition at line 56 of file tst-eintr2.c.

{
  while (1)
    {
      int e = pthread_mutex_lock (&m2);
      if (e != 0)
       {
         puts ("tf2: mutex_lock failed");
         exit (1);
       }
      e = pthread_mutex_unlock (&m2);
      if (e != 0)
       {
         puts ("tf2: mutex_unlock failed");
         exit (1);
       }
      struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000 };
      nanosleep (&ts, NULL);
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

Definition at line 31 of file tst-eintr2.c.

Definition at line 32 of file tst-eintr2.c.