1*c9961bb2Spirofti /* $OpenBSD: rthread_barrier_attr.c,v 1.1 2012/04/11 10:18:46 pirofti Exp $ */ 2*c9961bb2Spirofti /* 3*c9961bb2Spirofti * Copyright (c) 2012 Paul Irofti <pirofti@openbsd.org> 4*c9961bb2Spirofti * 5*c9961bb2Spirofti * Permission to use, copy, modify, and/or distribute this software for any 6*c9961bb2Spirofti * purpose with or without fee is hereby granted, provided that the above 7*c9961bb2Spirofti * copyright notice and this permission notice appear in all copies. 8*c9961bb2Spirofti * 9*c9961bb2Spirofti * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10*c9961bb2Spirofti * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11*c9961bb2Spirofti * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12*c9961bb2Spirofti * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13*c9961bb2Spirofti * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14*c9961bb2Spirofti * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15*c9961bb2Spirofti * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16*c9961bb2Spirofti */ 17*c9961bb2Spirofti 18*c9961bb2Spirofti #include <errno.h> 19*c9961bb2Spirofti #include <stdlib.h> 20*c9961bb2Spirofti 21*c9961bb2Spirofti #include <pthread.h> 22*c9961bb2Spirofti 23*c9961bb2Spirofti #include "rthread.h" 24*c9961bb2Spirofti 25*c9961bb2Spirofti int 26*c9961bb2Spirofti pthread_barrierattr_init(pthread_barrierattr_t *attr) 27*c9961bb2Spirofti { 28*c9961bb2Spirofti if (attr == NULL) { 29*c9961bb2Spirofti return EINVAL; 30*c9961bb2Spirofti } 31*c9961bb2Spirofti 32*c9961bb2Spirofti *attr = calloc(1, sizeof **attr); 33*c9961bb2Spirofti if (*attr == NULL) { 34*c9961bb2Spirofti return ENOMEM; 35*c9961bb2Spirofti } 36*c9961bb2Spirofti 37*c9961bb2Spirofti (*attr)->pshared = PTHREAD_PROCESS_PRIVATE; 38*c9961bb2Spirofti 39*c9961bb2Spirofti return 0; 40*c9961bb2Spirofti } 41*c9961bb2Spirofti 42*c9961bb2Spirofti int 43*c9961bb2Spirofti pthread_barrierattr_destroy(pthread_barrierattr_t *attr) 44*c9961bb2Spirofti { 45*c9961bb2Spirofti if (attr == NULL || *attr == NULL) { 46*c9961bb2Spirofti return EINVAL; 47*c9961bb2Spirofti } 48*c9961bb2Spirofti free(*attr); 49*c9961bb2Spirofti return 0; 50*c9961bb2Spirofti } 51*c9961bb2Spirofti 52*c9961bb2Spirofti int 53*c9961bb2Spirofti pthread_barrierattr_getpshared(pthread_barrierattr_t *attr, int *pshared) 54*c9961bb2Spirofti { 55*c9961bb2Spirofti if (attr == NULL || *attr == NULL) { 56*c9961bb2Spirofti return EINVAL; 57*c9961bb2Spirofti } 58*c9961bb2Spirofti *pshared = (*attr)->pshared; 59*c9961bb2Spirofti return 0; 60*c9961bb2Spirofti } 61*c9961bb2Spirofti 62*c9961bb2Spirofti int 63*c9961bb2Spirofti pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared) 64*c9961bb2Spirofti { 65*c9961bb2Spirofti if (attr == NULL || *attr == NULL) { 66*c9961bb2Spirofti return EINVAL; 67*c9961bb2Spirofti } 68*c9961bb2Spirofti 69*c9961bb2Spirofti if (pshared != PTHREAD_PROCESS_PRIVATE) { 70*c9961bb2Spirofti return ENOTSUP; 71*c9961bb2Spirofti } 72*c9961bb2Spirofti 73*c9961bb2Spirofti (*attr)->pshared = pshared; 74*c9961bb2Spirofti 75*c9961bb2Spirofti return 0; 76*c9961bb2Spirofti } 77