82 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * File: cancel9.c
 | |
|  *
 | |
|  * Test Synopsis: Test if waitpid is a cancellation point.
 | |
|  *
 | |
|  * Test Method (Validation or Falsification):
 | |
|  * - 
 | |
|  *
 | |
|  * Requirements Tested:
 | |
|  * -
 | |
|  *
 | |
|  * Features Tested:
 | |
|  * - 
 | |
|  *
 | |
|  * Cases Tested:
 | |
|  * - 
 | |
|  *
 | |
|  * Description:
 | |
|  * - 
 | |
|  *
 | |
|  * Environment:
 | |
|  * - 
 | |
|  *
 | |
|  * Input:
 | |
|  * - None.
 | |
|  *
 | |
|  * Output:
 | |
|  * - File name, Line number, and failed expression on failure.
 | |
|  * - No output on success.
 | |
|  *
 | |
|  * Assumptions:
 | |
|  * - have working pthread_create, pthread_cancel, pthread_setcancelstate
 | |
|  *   pthread_join
 | |
|  *
 | |
|  * Pass Criteria:
 | |
|  * - Process returns zero exit status.
 | |
|  *
 | |
|  * Fail Criteria:
 | |
|  * - Process returns non-zero exit status.
 | |
|  */
 | |
| 
 | |
| #include "test.h"
 | |
| #include <assert.h>
 | |
| #include <sys/wait.h>
 | |
| 
 | |
| static pid_t pid;
 | |
| 
 | |
| static void *Thread(void *punused)
 | |
| {
 | |
|   int res;
 | |
| 
 | |
|   pid = fork ();
 | |
|   assert (pid != -1);
 | |
|   switch (pid)
 | |
|     {
 | |
|     case 0:
 | |
|       sleep (10);
 | |
|       break;
 | |
|     default:
 | |
|       assert (waitpid (pid, &res, 0) != -1);
 | |
|     }
 | |
| 
 | |
|   return NULL;
 | |
| }
 | |
| 
 | |
| int main (void)
 | |
| {
 | |
|   int res;
 | |
| 
 | |
|   void * result;
 | |
|   pthread_t t;
 | |
| 
 | |
|   assert (pthread_create (&t, NULL, Thread, NULL) == 0);
 | |
|   sleep (5);
 | |
|   assert (pthread_cancel (t) == 0);
 | |
|   assert (pthread_join (t, &result) == 0);
 | |
|   assert (result == PTHREAD_CANCELED);
 | |
|   assert (waitpid (pid, &res, 0) != -1);
 | |
| 
 | |
|   return 0;
 | |
| }
 |