Home | History | Annotate | Download | only in pthread_join
      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