12c28215423293e443469a07ae7011135d058b671Garrett Cooper/*
20dc076565f772bb1953209fb69ea150b494aaa40robbiew * Copyright (c) 2002, Intel Corporation. All rights reserved.
30dc076565f772bb1953209fb69ea150b494aaa40robbiew * This file is licensed under the GPL license.  For the full content
42c28215423293e443469a07ae7011135d058b671Garrett Cooper * of this license, see the COPYING file at the top level of this
50dc076565f772bb1953209fb69ea150b494aaa40robbiew * source tree.
60dc076565f772bb1953209fb69ea150b494aaa40robbiew *
70dc076565f772bb1953209fb69ea150b494aaa40robbiew * pthread_barrier_init()
80dc076565f772bb1953209fb69ea150b494aaa40robbiew *
90dc076565f772bb1953209fb69ea150b494aaa40robbiew *
102c28215423293e443469a07ae7011135d058b671Garrett Cooper * The pthread_barrier_init() function shall allocate any resources
112c28215423293e443469a07ae7011135d058b671Garrett Cooper * required to use the barrier referenced by barrier and shall initialize
122c28215423293e443469a07ae7011135d058b671Garrett Cooper * the barrier with attributes referenced by attr. If attr is NULL,
132c28215423293e443469a07ae7011135d058b671Garrett Cooper * the default barrier attributes shall be used;
140dc076565f772bb1953209fb69ea150b494aaa40robbiew * the effect is the same as passing the address of a default barrier attributes object.
150dc076565f772bb1953209fb69ea150b494aaa40robbiew *
160dc076565f772bb1953209fb69ea150b494aaa40robbiew */
170dc076565f772bb1953209fb69ea150b494aaa40robbiew
180dc076565f772bb1953209fb69ea150b494aaa40robbiew#define _XOPEN_SOURCE 600
190dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <pthread.h>
200dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdio.h>
210dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdlib.h>
220dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <unistd.h>
230dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <signal.h>
240dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <errno.h>
250dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <string.h>
260dc076565f772bb1953209fb69ea150b494aaa40robbiew#include "posixtest.h"
270dc076565f772bb1953209fb69ea150b494aaa40robbiew
280dc076565f772bb1953209fb69ea150b494aaa40robbiew#define COUNT 1
290dc076565f772bb1953209fb69ea150b494aaa40robbiew
300dc076565f772bb1953209fb69ea150b494aaa40robbiewstatic pthread_barrier_t barrier;
310dc076565f772bb1953209fb69ea150b494aaa40robbiew
324ca2bbdcd3003f3c8df4e6129e9c7b2bd1514f87Cyril Hrubisint main(void)
330dc076565f772bb1953209fb69ea150b494aaa40robbiew{
340dc076565f772bb1953209fb69ea150b494aaa40robbiew	int rc;
350dc076565f772bb1953209fb69ea150b494aaa40robbiew	pthread_barrierattr_t ba;
360dc076565f772bb1953209fb69ea150b494aaa40robbiew
370dc076565f772bb1953209fb69ea150b494aaa40robbiew	/* Intilized barrier with NULL attribute, check that this can be done. */
380dc076565f772bb1953209fb69ea150b494aaa40robbiew	rc = pthread_barrier_init(&barrier, NULL, COUNT);
392c28215423293e443469a07ae7011135d058b671Garrett Cooper
40354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (rc != 0) {
410dc076565f772bb1953209fb69ea150b494aaa40robbiew		printf("Test FAILED: Error at pthread_barrier_init() "
42354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       "return code %d, %s\n", rc, strerror(rc));
430dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_FAIL;
440dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
450dc076565f772bb1953209fb69ea150b494aaa40robbiew
462c28215423293e443469a07ae7011135d058b671Garrett Cooper	/* Cleanup */
47354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (pthread_barrier_destroy(&barrier) != 0) {
480dc076565f772bb1953209fb69ea150b494aaa40robbiew		printf("Error at pthread_barrier_destroy() "
49354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       " return code: %d, %s\n", rc, strerror(rc));
500dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_UNRESOLVED;
510dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
520dc076565f772bb1953209fb69ea150b494aaa40robbiew
530dc076565f772bb1953209fb69ea150b494aaa40robbiew	/* Initialize a barrier attribute object */
54354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (pthread_barrierattr_init(&ba) != 0) {
550dc076565f772bb1953209fb69ea150b494aaa40robbiew		printf("Error at pthread_barrierattr_init()\n");
560dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_UNRESOLVED;
570dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
582c28215423293e443469a07ae7011135d058b671Garrett Cooper
590dc076565f772bb1953209fb69ea150b494aaa40robbiew	/* Initialize barrier with this barrier attribute object */
600dc076565f772bb1953209fb69ea150b494aaa40robbiew	rc = pthread_barrier_init(&barrier, &ba, COUNT);
61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (rc != 0) {
620dc076565f772bb1953209fb69ea150b494aaa40robbiew		printf("Test FAILED: Error at 2nd pthread_barrier_init() "
63354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       "return code %d, %s\n", rc, strerror(rc));
640dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_FAIL;
650dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
660dc076565f772bb1953209fb69ea150b494aaa40robbiew
670dc076565f772bb1953209fb69ea150b494aaa40robbiew	/* Cleanup */
68354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (pthread_barrierattr_destroy(&ba) != 0) {
690dc076565f772bb1953209fb69ea150b494aaa40robbiew		printf("Error at pthread_barrierattr_destroy()\n");
700dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_UNRESOLVED;
710dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
720dc076565f772bb1953209fb69ea150b494aaa40robbiew
73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (pthread_barrier_destroy(&barrier) != 0) {
740dc076565f772bb1953209fb69ea150b494aaa40robbiew		printf("Error at pthread_barrier_destroy() "
75354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		       " return code: %d, %s\n", rc, strerror(rc));
760dc076565f772bb1953209fb69ea150b494aaa40robbiew		return PTS_UNRESOLVED;
770dc076565f772bb1953209fb69ea150b494aaa40robbiew	}
780dc076565f772bb1953209fb69ea150b494aaa40robbiew
790dc076565f772bb1953209fb69ea150b494aaa40robbiew	printf("Test PASSED\n");
800dc076565f772bb1953209fb69ea150b494aaa40robbiew	return PTS_PASS;
81ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
82