xref: /dflybsd-src/lib/libthread_xu/thread/thr_barrierattr.c (revision 71b3fa151e714295cd932238bb91973cd4a02c55)
1*71b3fa15SDavid Xu /*
2*71b3fa15SDavid Xu  * Copyright (c) 2003 David Xu <davidxu@freebsd.org>.
3*71b3fa15SDavid Xu  * All rights reserved.
4*71b3fa15SDavid Xu  *
5*71b3fa15SDavid Xu  * Redistribution and use in source and binary forms, with or without
6*71b3fa15SDavid Xu  * modification, are permitted provided that the following conditions
7*71b3fa15SDavid Xu  * are met:
8*71b3fa15SDavid Xu  * 1. Redistributions of source code must retain the above copyright
9*71b3fa15SDavid Xu  *    notice(s), this list of conditions and the following disclaimer as
10*71b3fa15SDavid Xu  *    the first lines of this file unmodified other than the possible
11*71b3fa15SDavid Xu  *    addition of one or more copyright notices.
12*71b3fa15SDavid Xu  * 2. Redistributions in binary form must reproduce the above copyright
13*71b3fa15SDavid Xu  *    notice(s), this list of conditions and the following disclaimer in the
14*71b3fa15SDavid Xu  *    documentation and/or other materials provided with the distribution.
15*71b3fa15SDavid Xu  *
16*71b3fa15SDavid Xu  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
17*71b3fa15SDavid Xu  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18*71b3fa15SDavid Xu  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19*71b3fa15SDavid Xu  * DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
20*71b3fa15SDavid Xu  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21*71b3fa15SDavid Xu  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22*71b3fa15SDavid Xu  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23*71b3fa15SDavid Xu  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24*71b3fa15SDavid Xu  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25*71b3fa15SDavid Xu  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26*71b3fa15SDavid Xu  * DAMAGE.
27*71b3fa15SDavid Xu  *
28*71b3fa15SDavid Xu  * $FreeBSD: src/lib/libpthread/thread/thr_barrierattr.c,v 1.1 2003/09/04 14:06:43 davidxu Exp $
29*71b3fa15SDavid Xu  * $DragonFly: src/lib/libthread_xu/thread/thr_barrierattr.c,v 1.1 2005/02/01 12:38:27 davidxu Exp $
30*71b3fa15SDavid Xu  */
31*71b3fa15SDavid Xu 
32*71b3fa15SDavid Xu #include <errno.h>
33*71b3fa15SDavid Xu #include <stdlib.h>
34*71b3fa15SDavid Xu #include <pthread.h>
35*71b3fa15SDavid Xu #include "thr_private.h"
36*71b3fa15SDavid Xu 
37*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy);
38*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_init, pthread_barrierattr_init);
39*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_setpshared,
40*71b3fa15SDavid Xu 	pthread_barrierattr_setpshared);
41*71b3fa15SDavid Xu __weak_reference(_pthread_barrierattr_getpshared,
42*71b3fa15SDavid Xu 	pthread_barrierattr_getpshared);
43*71b3fa15SDavid Xu 
44*71b3fa15SDavid Xu int
45*71b3fa15SDavid Xu _pthread_barrierattr_destroy(pthread_barrierattr_t *attr)
46*71b3fa15SDavid Xu {
47*71b3fa15SDavid Xu 
48*71b3fa15SDavid Xu 	if (attr == NULL || *attr == NULL)
49*71b3fa15SDavid Xu 		return (EINVAL);
50*71b3fa15SDavid Xu 
51*71b3fa15SDavid Xu 	free(*attr);
52*71b3fa15SDavid Xu 	return (0);
53*71b3fa15SDavid Xu }
54*71b3fa15SDavid Xu 
55*71b3fa15SDavid Xu int
56*71b3fa15SDavid Xu _pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr,
57*71b3fa15SDavid Xu 	int *pshared)
58*71b3fa15SDavid Xu {
59*71b3fa15SDavid Xu 
60*71b3fa15SDavid Xu 	if (attr == NULL || *attr == NULL)
61*71b3fa15SDavid Xu 		return (EINVAL);
62*71b3fa15SDavid Xu 
63*71b3fa15SDavid Xu 	*pshared = (*attr)->pshared;
64*71b3fa15SDavid Xu 	return (0);
65*71b3fa15SDavid Xu }
66*71b3fa15SDavid Xu 
67*71b3fa15SDavid Xu int
68*71b3fa15SDavid Xu _pthread_barrierattr_init(pthread_barrierattr_t *attr)
69*71b3fa15SDavid Xu {
70*71b3fa15SDavid Xu 
71*71b3fa15SDavid Xu 	if (attr == NULL)
72*71b3fa15SDavid Xu 		return (EINVAL);
73*71b3fa15SDavid Xu 
74*71b3fa15SDavid Xu 	if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL)
75*71b3fa15SDavid Xu 		return (ENOMEM);
76*71b3fa15SDavid Xu 
77*71b3fa15SDavid Xu 	(*attr)->pshared = PTHREAD_PROCESS_PRIVATE;
78*71b3fa15SDavid Xu 	return (0);
79*71b3fa15SDavid Xu }
80*71b3fa15SDavid Xu 
81*71b3fa15SDavid Xu int
82*71b3fa15SDavid Xu _pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared)
83*71b3fa15SDavid Xu {
84*71b3fa15SDavid Xu 
85*71b3fa15SDavid Xu 	if (attr == NULL || *attr == NULL)
86*71b3fa15SDavid Xu 		return (EINVAL);
87*71b3fa15SDavid Xu 
88*71b3fa15SDavid Xu 	/* Only PTHREAD_PROCESS_PRIVATE is supported. */
89*71b3fa15SDavid Xu 	if (pshared != PTHREAD_PROCESS_PRIVATE)
90*71b3fa15SDavid Xu 		return (EINVAL);
91*71b3fa15SDavid Xu 
92*71b3fa15SDavid Xu 	(*attr)->pshared = pshared;
93*71b3fa15SDavid Xu 	return (0);
94*71b3fa15SDavid Xu }
95