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