1 /* 2 * Copyright (c) 2002, Intel Corporation. All rights reserved. 3 * Created by: rolla.n.selbak REMOVE-THIS AT intel DOT com 4 * This file is licensed under the GPL license. For the full content 5 * of this license, see the COPYING file at the top level of this 6 * source tree. 7 * 8 * Test that pthread_join() 9 * 10 * shall suspend the execution of the calling thread until the target 11 * 'thread' terminates, unless 'thread' has already terminated. 12 * 13 * Steps: 14 * 1. Create a new thread. Have it sleep for 3 seconds. 15 * 2. The main() thread should wait for the new thread to finish 16 * execution before exiting out. 17 * 18 */ 19 20 #include <pthread.h> 21 #include <stdio.h> 22 #include <unistd.h> 23 #include "posixtest.h" 24 25 static int end_exec; 26 27 static void *a_thread_func() 28 { 29 int i; 30 31 printf("Wait for 3 seconds for thread to finish execution:\n"); 32 for (i = 1; i < 4; i++) { 33 printf("Waited (%d) second\n", i); 34 sleep(1); 35 } 36 37 /* Indicate that the thread has ended execution. */ 38 end_exec = 1; 39 40 pthread_exit(0); 41 return NULL; 42 } 43 44 int main(void) 45 { 46 pthread_t new_th; 47 48 /* Initialize flag */ 49 end_exec = 0; 50 51 /* Create a new thread. */ 52 if (pthread_create(&new_th, NULL, a_thread_func, NULL) != 0) { 53 perror("Error creating thread\n"); 54 return PTS_UNRESOLVED; 55 } 56 57 /* Wait for thread to return */ 58 if (pthread_join(new_th, NULL) != 0) { 59 perror("Error in pthread_join()\n"); 60 return PTS_UNRESOLVED; 61 } 62 63 if (end_exec == 0) { 64 printf("Test FAILED: When using pthread_join(), " 65 "main() did not wait for thread to finish " 66 "execution before continuing.\n"); 67 return PTS_FAIL; 68 } 69 70 printf("Test PASSED\n"); 71 return PTS_PASS; 72 } 73