1*71b3fa15SDavid Xu /* 2*71b3fa15SDavid Xu * Copyright (c) 2003 David Xu <davidxu@freebsd.org>. 3*71b3fa15SDavid Xu * All rights reserved. 4*71b3fa15SDavid Xu * 5*71b3fa15SDavid Xu * Redistribution and use in source and binary forms, with or without 6*71b3fa15SDavid Xu * modification, are permitted provided that the following conditions 7*71b3fa15SDavid Xu * are met: 8*71b3fa15SDavid Xu * 1. Redistributions of source code must retain the above copyright 9*71b3fa15SDavid Xu * notice(s), this list of conditions and the following disclaimer as 10*71b3fa15SDavid Xu * the first lines of this file unmodified other than the possible 11*71b3fa15SDavid Xu * addition of one or more copyright notices. 12*71b3fa15SDavid Xu * 2. Redistributions in binary form must reproduce the above copyright 13*71b3fa15SDavid Xu * notice(s), this list of conditions and the following disclaimer in the 14*71b3fa15SDavid Xu * documentation and/or other materials provided with the distribution. 15*71b3fa15SDavid Xu * 16*71b3fa15SDavid Xu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 17*71b3fa15SDavid Xu * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18*71b3fa15SDavid Xu * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19*71b3fa15SDavid Xu * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 20*71b3fa15SDavid Xu * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21*71b3fa15SDavid Xu * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22*71b3fa15SDavid Xu * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23*71b3fa15SDavid Xu * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*71b3fa15SDavid Xu * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*71b3fa15SDavid Xu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 26*71b3fa15SDavid Xu * DAMAGE. 27*71b3fa15SDavid Xu * 28*71b3fa15SDavid Xu * $FreeBSD: src/lib/libpthread/thread/thr_barrierattr.c,v 1.1 2003/09/04 14:06:43 davidxu Exp $ 29*71b3fa15SDavid Xu * $DragonFly: src/lib/libthread_xu/thread/thr_barrierattr.c,v 1.1 2005/02/01 12:38:27 davidxu Exp $ 30*71b3fa15SDavid Xu */ 31*71b3fa15SDavid Xu 32*71b3fa15SDavid Xu #include <errno.h> 33*71b3fa15SDavid Xu #include <stdlib.h> 34*71b3fa15SDavid Xu #include <pthread.h> 35*71b3fa15SDavid Xu #include "thr_private.h" 36*71b3fa15SDavid Xu 37*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy); 38*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_init, pthread_barrierattr_init); 39*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_setpshared, 40*71b3fa15SDavid Xu pthread_barrierattr_setpshared); 41*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_getpshared, 42*71b3fa15SDavid Xu pthread_barrierattr_getpshared); 43*71b3fa15SDavid Xu 44*71b3fa15SDavid Xu int 45*71b3fa15SDavid Xu _pthread_barrierattr_destroy(pthread_barrierattr_t *attr) 46*71b3fa15SDavid Xu { 47*71b3fa15SDavid Xu 48*71b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 49*71b3fa15SDavid Xu return (EINVAL); 50*71b3fa15SDavid Xu 51*71b3fa15SDavid Xu free(*attr); 52*71b3fa15SDavid Xu return (0); 53*71b3fa15SDavid Xu } 54*71b3fa15SDavid Xu 55*71b3fa15SDavid Xu int 56*71b3fa15SDavid Xu _pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, 57*71b3fa15SDavid Xu int *pshared) 58*71b3fa15SDavid Xu { 59*71b3fa15SDavid Xu 60*71b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 61*71b3fa15SDavid Xu return (EINVAL); 62*71b3fa15SDavid Xu 63*71b3fa15SDavid Xu *pshared = (*attr)->pshared; 64*71b3fa15SDavid Xu return (0); 65*71b3fa15SDavid Xu } 66*71b3fa15SDavid Xu 67*71b3fa15SDavid Xu int 68*71b3fa15SDavid Xu _pthread_barrierattr_init(pthread_barrierattr_t *attr) 69*71b3fa15SDavid Xu { 70*71b3fa15SDavid Xu 71*71b3fa15SDavid Xu if (attr == NULL) 72*71b3fa15SDavid Xu return (EINVAL); 73*71b3fa15SDavid Xu 74*71b3fa15SDavid Xu if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL) 75*71b3fa15SDavid Xu return (ENOMEM); 76*71b3fa15SDavid Xu 77*71b3fa15SDavid Xu (*attr)->pshared = PTHREAD_PROCESS_PRIVATE; 78*71b3fa15SDavid Xu return (0); 79*71b3fa15SDavid Xu } 80*71b3fa15SDavid Xu 81*71b3fa15SDavid Xu int 82*71b3fa15SDavid Xu _pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) 83*71b3fa15SDavid Xu { 84*71b3fa15SDavid Xu 85*71b3fa15SDavid Xu if (attr == NULL || *attr == NULL) 86*71b3fa15SDavid Xu return (EINVAL); 87*71b3fa15SDavid Xu 88*71b3fa15SDavid Xu /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 89*71b3fa15SDavid Xu if (pshared != PTHREAD_PROCESS_PRIVATE) 90*71b3fa15SDavid Xu return (EINVAL); 91*71b3fa15SDavid Xu 92*71b3fa15SDavid Xu (*attr)->pshared = pshared; 93*71b3fa15SDavid Xu return (0); 94*71b3fa15SDavid Xu } 95