Back to index

glibc  2.9
Functions | Variables
tst-fork2.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 * tf (void *arg)
int main (void)

Variables

static pid_t initial_pid

Function Documentation

int main ( void  )

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

{
  initial_pid = getpid ();

  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 th;
      if (pthread_create (&th, NULL, tf, NULL) != 0)
       {
         puts ("pthread_create failed");
         exit (1);
       }

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

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

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

  return status;
}

Here is the call graph for this function:

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

Definition at line 32 of file tst-fork2.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:


Variable Documentation

pid_t initial_pid [static]

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