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
pthread_barrierattr_init(pthread_barrierattr_t * attr)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
pthread_barrierattr_destroy(pthread_barrierattr_t * attr)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
pthread_barrierattr_getpshared(pthread_barrierattr_t * attr,int * pshared)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
pthread_barrierattr_setpshared(pthread_barrierattr_t * attr,int pshared)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