Back to index

glibc  2.9
Functions | Variables
tst-fork3.c File Reference
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

Go to the source code of this file.

Functions

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

Variables

static pid_t initial_pid

Function Documentation

int main ( void  )

Definition at line 92 of file tst-fork3.c.

{
  initial_pid = getpid ();

  pthread_t th1;
  if (pthread_create (&th1, NULL, tf1, NULL) != 0)
    {
      puts ("parent: pthread_create failed");
      exit (1);
    }

  /* This call should never return.  */
  pthread_join (th1, NULL);

  return 1;
}

Here is the call graph for this function:

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

Definition at line 46 of file tst-fork3.c.

{
  pid_t child = fork ();
  if (child == 0)
    {
      if (getppid () != initial_pid)
       {
         printf ("first getppid returned %ld, expected %ld\n",
                (long int) getppid (), (long int) initial_pid);
         exit (1);
       }

      pthread_t th2;
      if (pthread_create (&th2, NULL, tf2, NULL) != 0)
       {
         puts ("child: pthread_create failed");
         exit (1);
       }

      void *result;
      if (pthread_join (th2, &result) != 0)
       {
         puts ("pthread_join failed");
         exit  (1);
       }

      exit (result == NULL ? 0 : 1);
    }
  else if (child == -1)
    {
      puts ("initial fork failed");
      exit (1);
    }

  int status;
  if (TEMP_FAILURE_RETRY (waitpid (child, &status, 0)) != child)
    {
      printf ("waitpid failed: %m\n");
      exit (1);
    }

  exit (status);
}

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 32 of file tst-fork3.c.

{
  if (getppid () != initial_pid)
    {
      printf ("getppid in thread returned %ld, expected %ld\n",
             (long int) getppid (), (long int) initial_pid);
      return (void *) -1;
    }

  return NULL;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

pid_t initial_pid [static]

Definition at line 28 of file tst-fork3.c.