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 $ 29*5a1048c8SDavid Xu * $DragonFly: src/lib/libthread_xu/thread/thr_barrierattr.c,v 1.2 2006/04/05 00:24:35 davidxu Exp $ 3071b3fa15SDavid Xu */ 3171b3fa15SDavid Xu 3271b3fa15SDavid Xu #include <errno.h> 3371b3fa15SDavid Xu #include <stdlib.h> 3471b3fa15SDavid Xu #include <pthread.h> 3571b3fa15SDavid Xu #include "thr_private.h" 3671b3fa15SDavid Xu 3771b3fa15SDavid Xu int 3871b3fa15SDavid Xu _pthread_barrierattr_destroy(pthread_barrierattr_t *attr) 3971b3fa15SDavid Xu { 4071b3fa15SDavid Xu 4171b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 4271b3fa15SDavid Xu return (EINVAL); 4371b3fa15SDavid Xu 4471b3fa15SDavid Xu free(*attr); 4571b3fa15SDavid Xu return (0); 4671b3fa15SDavid Xu } 4771b3fa15SDavid Xu 4871b3fa15SDavid Xu int 4971b3fa15SDavid Xu _pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, 5071b3fa15SDavid Xu int *pshared) 5171b3fa15SDavid Xu { 5271b3fa15SDavid Xu 5371b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 5471b3fa15SDavid Xu return (EINVAL); 5571b3fa15SDavid Xu 5671b3fa15SDavid Xu *pshared = (*attr)->pshared; 5771b3fa15SDavid Xu return (0); 5871b3fa15SDavid Xu } 5971b3fa15SDavid Xu 6071b3fa15SDavid Xu int 6171b3fa15SDavid Xu _pthread_barrierattr_init(pthread_barrierattr_t *attr) 6271b3fa15SDavid Xu { 6371b3fa15SDavid Xu 6471b3fa15SDavid Xu if (attr == NULL) 6571b3fa15SDavid Xu return (EINVAL); 6671b3fa15SDavid Xu 6771b3fa15SDavid Xu if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL) 6871b3fa15SDavid Xu return (ENOMEM); 6971b3fa15SDavid Xu 7071b3fa15SDavid Xu (*attr)->pshared = PTHREAD_PROCESS_PRIVATE; 7171b3fa15SDavid Xu return (0); 7271b3fa15SDavid Xu } 7371b3fa15SDavid Xu 7471b3fa15SDavid Xu int 7571b3fa15SDavid Xu _pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) 7671b3fa15SDavid Xu { 7771b3fa15SDavid Xu 7871b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 7971b3fa15SDavid Xu return (EINVAL); 8071b3fa15SDavid Xu 8171b3fa15SDavid Xu /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 8271b3fa15SDavid Xu if (pshared != PTHREAD_PROCESS_PRIVATE) 8371b3fa15SDavid Xu return (EINVAL); 8471b3fa15SDavid Xu 8571b3fa15SDavid Xu (*attr)->pshared = pshared; 8671b3fa15SDavid Xu return (0); 8771b3fa15SDavid Xu } 88*5a1048c8SDavid Xu 89*5a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy); 90*5a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_init, pthread_barrierattr_init); 91*5a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_setpshared, 92*5a1048c8SDavid Xu pthread_barrierattr_setpshared); 93*5a1048c8SDavid Xu __strong_reference(_pthread_barrierattr_getpshared, 94*5a1048c8SDavid Xu pthread_barrierattr_getpshared); 95*5a1048c8SDavid Xu 96