thr_barrierattr.c revision 174112
1228060Sbapt/*
2228060Sbapt * Copyright (c) 2003 David Xu <davidxu@freebsd.org>.
3228060Sbapt * All rights reserved.
4228060Sbapt *
5228060Sbapt * Redistribution and use in source and binary forms, with or without
6228060Sbapt * modification, are permitted provided that the following conditions
7228060Sbapt * are met:
8228060Sbapt * 1. Redistributions of source code must retain the above copyright
9228060Sbapt *    notice(s), this list of conditions and the following disclaimer as
10228060Sbapt *    the first lines of this file unmodified other than the possible
11228060Sbapt *    addition of one or more copyright notices.
12228060Sbapt * 2. Redistributions in binary form must reproduce the above copyright
13228060Sbapt *    notice(s), this list of conditions and the following disclaimer in the
14228060Sbapt *    documentation and/or other materials provided with the distribution.
15228060Sbapt *
16228060Sbapt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
17228060Sbapt * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18228060Sbapt * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19228060Sbapt * DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
20228060Sbapt * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21228060Sbapt * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22228060Sbapt * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23228060Sbapt * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24228060Sbapt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25228060Sbapt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26228060Sbapt * DAMAGE.
27228060Sbapt *
28228060Sbapt * $FreeBSD: head/lib/libkse/thread/thr_barrierattr.c 174112 2007-11-30 17:20:29Z deischen $
29228060Sbapt */
30228060Sbapt
31228060Sbapt#include "namespace.h"
32228060Sbapt#include <errno.h>
33228060Sbapt#include <stdlib.h>
34228060Sbapt#include <pthread.h>
35228060Sbapt#include "un-namespace.h"
36228060Sbapt#include "thr_private.h"
37228060Sbapt
38228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_destroy);
39228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_destroy);
40228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_init);
41228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_init);
42228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_setpshared);
43228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_setpshared);
44228060SbaptLT10_COMPAT_PRIVATE(_pthread_barrierattr_getpshared);
45228060SbaptLT10_COMPAT_DEFAULT(pthread_barrierattr_getpshared);
46228060Sbapt
47228060Sbapt__weak_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy);
48228060Sbapt__weak_reference(_pthread_barrierattr_init, pthread_barrierattr_init);
49228060Sbapt__weak_reference(_pthread_barrierattr_setpshared,
50228060Sbapt	pthread_barrierattr_setpshared);
51228060Sbapt__weak_reference(_pthread_barrierattr_getpshared,
52228060Sbapt	pthread_barrierattr_getpshared);
53228060Sbapt
54228060Sbaptint
55228060Sbapt_pthread_barrierattr_destroy(pthread_barrierattr_t *attr)
56228060Sbapt{
57228060Sbapt
58228060Sbapt	if (attr == NULL || *attr == NULL)
59228060Sbapt		return (EINVAL);
60228060Sbapt
61228060Sbapt	free(*attr);
62228060Sbapt	return (0);
63228060Sbapt}
64228060Sbapt
65228060Sbaptint
66228060Sbapt_pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr,
67228060Sbapt	int *pshared)
68228060Sbapt{
69228060Sbapt
70228060Sbapt	if (attr == NULL || *attr == NULL)
7167064Sobrien		return (EINVAL);
7267064Sobrien
7367064Sobrien	*pshared = (*attr)->pshared;
7467064Sobrien	return (0);
7567064Sobrien}
7667064Sobrien
7767064Sobrienint
7867064Sobrien_pthread_barrierattr_init(pthread_barrierattr_t *attr)
7967064Sobrien{
8067064Sobrien
8158551Skris	if (attr == NULL)
8258551Skris		return (EINVAL);
8358551Skris
8458551Skris	if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL)
8558551Skris		return (ENOMEM);
8658551Skris
8758551Skris	(*attr)->pshared = PTHREAD_PROCESS_PRIVATE;
8858551Skris	return (0);
8958551Skris}
9058551Skris
9158551Skrisint
92_pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared)
93{
94
95	if (attr == NULL || *attr == NULL)
96		return (EINVAL);
97
98	/* Only PTHREAD_PROCESS_PRIVATE is supported. */
99	if (pshared != PTHREAD_PROCESS_PRIVATE)
100		return (EINVAL);
101
102	(*attr)->pshared = pshared;
103	return (0);
104}
105