thr_barrierattr.c revision 174112
1228060Sbapt/* 2228060Sbapt * Copyright (c) 2003 David Xu <davidxu@freebsd.org>. 3228060Sbapt * All rights reserved. 4228060Sbapt * 5228060Sbapt * Redistribution and use in source and binary forms, with or without 6228060Sbapt * modification, are permitted provided that the following conditions 7228060Sbapt * are met: 8228060Sbapt * 1. Redistributions of source code must retain the above copyright 9228060Sbapt * notice(s), this list of conditions and the following disclaimer as 10228060Sbapt * the first lines of this file unmodified other than the possible 11228060Sbapt * addition of one or more copyright notices. 12228060Sbapt * 2. Redistributions in binary form must reproduce the above copyright 13228060Sbapt * notice(s), this list of conditions and the following disclaimer in the 14228060Sbapt * documentation and/or other materials provided with the distribution. 15228060Sbapt * 16228060Sbapt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 17228060Sbapt * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18228060Sbapt * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19228060Sbapt * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 20228060Sbapt * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21228060Sbapt * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22228060Sbapt * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23228060Sbapt * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24228060Sbapt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25228060Sbapt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 26228060Sbapt * DAMAGE. 27228060Sbapt * 28228060Sbapt * $FreeBSD: head/lib/libkse/thread/thr_barrierattr.c 174112 2007-11-30 17:20:29Z deischen $ 29228060Sbapt */ 30228060Sbapt 31228060Sbapt#include "namespace.h" 32228060Sbapt#include <errno.h> 33228060Sbapt#include <stdlib.h> 34228060Sbapt#include <pthread.h> 35228060Sbapt#include "un-namespace.h" 36228060Sbapt#include "thr_private.h" 37228060Sbapt 38228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_destroy); 39228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_destroy); 40228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_init); 41228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_init); 42228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_setpshared); 43228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_setpshared); 44228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_getpshared); 45228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_getpshared); 46228060Sbapt 47228060Sbapt__weak_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy); 48228060Sbapt__weak_reference(_pthread_barrierattr_init, pthread_barrierattr_init); 49228060Sbapt__weak_reference(_pthread_barrierattr_setpshared, 50228060Sbapt pthread_barrierattr_setpshared); 51228060Sbapt__weak_reference(_pthread_barrierattr_getpshared, 52228060Sbapt pthread_barrierattr_getpshared); 53228060Sbapt 54228060Sbaptint 55228060Sbapt_pthread_barrierattr_destroy(pthread_barrierattr_t *attr) 56228060Sbapt{ 57228060Sbapt 58228060Sbapt if (attr == NULL || *attr == NULL) 59228060Sbapt return (EINVAL); 60228060Sbapt 61228060Sbapt free(*attr); 62228060Sbapt return (0); 63228060Sbapt} 64228060Sbapt 65228060Sbaptint 66228060Sbapt_pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, 67228060Sbapt int *pshared) 68228060Sbapt{ 69228060Sbapt 70228060Sbapt if (attr == NULL || *attr == NULL) 7167064Sobrien return (EINVAL); 7267064Sobrien 7367064Sobrien *pshared = (*attr)->pshared; 7467064Sobrien return (0); 7567064Sobrien} 7667064Sobrien 7767064Sobrienint 7867064Sobrien_pthread_barrierattr_init(pthread_barrierattr_t *attr) 7967064Sobrien{ 8067064Sobrien 8158551Skris if (attr == NULL) 8258551Skris return (EINVAL); 8358551Skris 8458551Skris if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL) 8558551Skris return (ENOMEM); 8658551Skris 8758551Skris (*attr)->pshared = PTHREAD_PROCESS_PRIVATE; 8858551Skris return (0); 8958551Skris} 9058551Skris 9158551Skrisint 92_pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) 93{ 94 95 if (attr == NULL || *attr == NULL) 96 return (EINVAL); 97 98 /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 99 if (pshared != PTHREAD_PROCESS_PRIVATE) 100 return (EINVAL); 101 102 (*attr)->pshared = pshared; 103 return (0); 104} 105