thr_barrierattr.c revision 174689
1156772Sdeischen/* 2156772Sdeischen * Copyright (c) 2003 David Xu <davidxu@freebsd.org>. 3156772Sdeischen * All rights reserved. 4156772Sdeischen * 5156772Sdeischen * Redistribution and use in source and binary forms, with or without 6156772Sdeischen * modification, are permitted provided that the following conditions 7156772Sdeischen * are met: 8156772Sdeischen * 1. Redistributions of source code must retain the above copyright 9156772Sdeischen * notice(s), this list of conditions and the following disclaimer as 10156772Sdeischen * the first lines of this file unmodified other than the possible 11156772Sdeischen * addition of one or more copyright notices. 12156772Sdeischen * 2. Redistributions in binary form must reproduce the above copyright 13156772Sdeischen * notice(s), this list of conditions and the following disclaimer in the 14156772Sdeischen * documentation and/or other materials provided with the distribution. 15156772Sdeischen * 16156772Sdeischen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY 17156772Sdeischen * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18156772Sdeischen * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19156772Sdeischen * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY 20156772Sdeischen * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21156772Sdeischen * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22156772Sdeischen * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23156772Sdeischen * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24156772Sdeischen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25156772Sdeischen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 26156772Sdeischen * DAMAGE. 27156772Sdeischen * 28156772Sdeischen * $FreeBSD: head/lib/libkse/thread/thr_barrierattr.c 174689 2007-12-16 23:29:57Z deischen $ 29156772Sdeischen */ 30156772Sdeischen 31156772Sdeischen#include "namespace.h" 32156772Sdeischen#include <errno.h> 33156772Sdeischen#include <stdlib.h> 34156772Sdeischen#include <pthread.h> 35156772Sdeischen#include "un-namespace.h" 36156772Sdeischen#include "thr_private.h" 37156772Sdeischen 38156772Sdeischen__weak_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy); 39156772Sdeischen__weak_reference(_pthread_barrierattr_init, pthread_barrierattr_init); 40156772Sdeischen__weak_reference(_pthread_barrierattr_setpshared, 41156772Sdeischen pthread_barrierattr_setpshared); 42156772Sdeischen__weak_reference(_pthread_barrierattr_getpshared, 43156772Sdeischen pthread_barrierattr_getpshared); 44156772Sdeischen 45156772Sdeischenint 46156772Sdeischen_pthread_barrierattr_destroy(pthread_barrierattr_t *attr) 47156772Sdeischen{ 48156772Sdeischen 49156772Sdeischen if (attr == NULL || *attr == NULL) 50156772Sdeischen return (EINVAL); 51156772Sdeischen 52156772Sdeischen free(*attr); 53156772Sdeischen return (0); 54156772Sdeischen} 55156772Sdeischen 56168963Sdeischenint 57156772Sdeischen_pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, 58156772Sdeischen int *pshared) 59156772Sdeischen{ 60156772Sdeischen 61156772Sdeischen if (attr == NULL || *attr == NULL) 62156772Sdeischen return (EINVAL); 63156772Sdeischen 64156772Sdeischen *pshared = (*attr)->pshared; 65156772Sdeischen return (0); 66156772Sdeischen} 67156772Sdeischen 68156772Sdeischenint 69156772Sdeischen_pthread_barrierattr_init(pthread_barrierattr_t *attr) 70156772Sdeischen{ 71156772Sdeischen 72156772Sdeischen if (attr == NULL) 73156772Sdeischen return (EINVAL); 74156772Sdeischen 75156772Sdeischen if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL) 76156772Sdeischen return (ENOMEM); 77156772Sdeischen 78156772Sdeischen (*attr)->pshared = PTHREAD_PROCESS_PRIVATE; 79156772Sdeischen return (0); 80156772Sdeischen} 81156772Sdeischen 82156772Sdeischenint 83156772Sdeischen_pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) 84156772Sdeischen{ 85156772Sdeischen 86156772Sdeischen if (attr == NULL || *attr == NULL) 87156772Sdeischen return (EINVAL); 88156772Sdeischen 89156772Sdeischen /* Only PTHREAD_PROCESS_PRIVATE is supported. */ 90156772Sdeischen if (pshared != PTHREAD_PROCESS_PRIVATE) 91156772Sdeischen return (EINVAL); 92156772Sdeischen 93156772Sdeischen (*attr)->pshared = pshared; 94156772Sdeischen return (0); 95156772Sdeischen} 96156772Sdeischen