171b3fa15SDavid Xu /* 271b3fa15SDavid Xu * Copyright (c) 2003 David Xu <davidxu@freebsd.org>. 371b3fa15SDavid Xu * All rights reserved. 471b3fa15SDavid Xu * 571b3fa15SDavid Xu * Redistribution and use in source and binary forms, with or without 671b3fa15SDavid Xu * modification, are permitted provided that the following conditions 771b3fa15SDavid Xu * are met: 871b3fa15SDavid Xu * 1. Redistributions of source code must retain the above copyright 971b3fa15SDavid Xu * notice(s), this list of conditions and the following disclaimer as 1071b3fa15SDavid Xu * the first lines of this file unmodified other than the possible 1171b3fa15SDavid Xu * addition of one or more copyright notices. 1271b3fa15SDavid Xu * 2. Redistributions in binary form must reproduce the above copyright 1371b3fa15SDavid Xu * notice(s), this list of conditions and the following disclaimer in the 1471b3fa15SDavid Xu * documentation and/or other materials provided with the distribution. 1571b3fa15SDavid Xu * 1671b3fa15SDavid Xu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 1771b3fa15SDavid Xu * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1871b3fa15SDavid Xu * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1971b3fa15SDavid Xu * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 2071b3fa15SDavid Xu * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 2171b3fa15SDavid Xu * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2271b3fa15SDavid Xu * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 2371b3fa15SDavid Xu * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2471b3fa15SDavid Xu * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2571b3fa15SDavid Xu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 2671b3fa15SDavid Xu * DAMAGE. 2771b3fa15SDavid Xu * 2871b3fa15SDavid Xu * $FreeBSD: src/lib/libpthread/thread/thr_barrierattr.c,v 1.1 2003/09/04 14:06:43 davidxu Exp $ 2971b3fa15SDavid Xu */ 3071b3fa15SDavid Xu 31fc71f871SDavid Xu #include "namespace.h" 3271b3fa15SDavid Xu #include <errno.h> 3371b3fa15SDavid Xu #include <stdlib.h> 3471b3fa15SDavid Xu #include <pthread.h> 35fc71f871SDavid Xu #include "un-namespace.h" 36fc71f871SDavid Xu 3771b3fa15SDavid Xu #include "thr_private.h" 3871b3fa15SDavid Xu 3971b3fa15SDavid Xu int 4071b3fa15SDavid Xu _pthread_barrierattr_destroy(pthread_barrierattr_t *attr) 4171b3fa15SDavid Xu { 4271b3fa15SDavid Xu 4371b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 4471b3fa15SDavid Xu return (EINVAL); 45*e7bf3f77SMatthew Dillon __free(*attr); 4671b3fa15SDavid Xu 4771b3fa15SDavid Xu return (0); 4871b3fa15SDavid Xu } 4971b3fa15SDavid Xu 5071b3fa15SDavid Xu int 51d33005aaSSascha Wildner _pthread_barrierattr_getpshared(const pthread_barrierattr_t * __restrict attr, 52d33005aaSSascha Wildner int * __restrict pshared) 5371b3fa15SDavid Xu { 5471b3fa15SDavid Xu 5571b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 5671b3fa15SDavid Xu return (EINVAL); 5771b3fa15SDavid Xu 5871b3fa15SDavid Xu *pshared = (*attr)->pshared; 5971b3fa15SDavid Xu return (0); 6071b3fa15SDavid Xu } 6171b3fa15SDavid Xu 6271b3fa15SDavid Xu int 6371b3fa15SDavid Xu _pthread_barrierattr_init(pthread_barrierattr_t *attr) 6471b3fa15SDavid Xu { 6571b3fa15SDavid Xu 6671b3fa15SDavid Xu if (attr == NULL) 6771b3fa15SDavid Xu return (EINVAL); 6871b3fa15SDavid Xu 69*e7bf3f77SMatthew Dillon *attr = __malloc(sizeof(struct pthread_barrierattr)); 70*e7bf3f77SMatthew Dillon if (*attr ==NULL) 7171b3fa15SDavid Xu return (ENOMEM); 7271b3fa15SDavid Xu (*attr)->pshared = PTHREAD_PROCESS_PRIVATE; 73*e7bf3f77SMatthew Dillon 7471b3fa15SDavid Xu return (0); 7571b3fa15SDavid Xu } 7671b3fa15SDavid Xu 7771b3fa15SDavid Xu int 7871b3fa15SDavid Xu _pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) 7971b3fa15SDavid Xu { 8071b3fa15SDavid Xu 8171b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 8271b3fa15SDavid Xu return (EINVAL); 8371b3fa15SDavid Xu 8471b3fa15SDavid Xu /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 8571b3fa15SDavid Xu if (pshared != PTHREAD_PROCESS_PRIVATE) 8671b3fa15SDavid Xu return (EINVAL); 8771b3fa15SDavid Xu 8871b3fa15SDavid Xu (*attr)->pshared = pshared; 8971b3fa15SDavid Xu return (0); 9071b3fa15SDavid Xu } 915a1048c8SDavid Xu 925a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy); 935a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_init, pthread_barrierattr_init); 945a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_setpshared, 955a1048c8SDavid Xu pthread_barrierattr_setpshared); 965a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_getpshared, 975a1048c8SDavid Xu pthread_barrierattr_getpshared); 98