1144518Sdavidxu/*
2144518Sdavidxu * Copyright (c) 2003 David Xu <davidxu@freebsd.org>.
3126000Smtm * All rights reserved.
4126000Smtm *
5126000Smtm * Redistribution and use in source and binary forms, with or without
6126000Smtm * modification, are permitted provided that the following conditions
7126000Smtm * are met:
8126000Smtm * 1. Redistributions of source code must retain the above copyright
9144518Sdavidxu *    notice(s), this list of conditions and the following disclaimer as
10144518Sdavidxu *    the first lines of this file unmodified other than the possible
11144518Sdavidxu *    addition of one or more copyright notices.
12126000Smtm * 2. Redistributions in binary form must reproduce the above copyright
13144518Sdavidxu *    notice(s), this list of conditions and the following disclaimer in the
14126000Smtm *    documentation and/or other materials provided with the distribution.
15126000Smtm *
16144518Sdavidxu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
17144518Sdavidxu * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18144518Sdavidxu * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19144518Sdavidxu * DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
20144518Sdavidxu * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21144518Sdavidxu * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22144518Sdavidxu * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23144518Sdavidxu * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24126000Smtm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25144518Sdavidxu * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26144518Sdavidxu * DAMAGE.
27126000Smtm *
28126000Smtm * $FreeBSD$
29126000Smtm */
30126000Smtm
31157457Sdavidxu#include "namespace.h"
32144518Sdavidxu#include <errno.h>
33144518Sdavidxu#include <stdlib.h>
34126000Smtm#include <pthread.h>
35157457Sdavidxu#include "un-namespace.h"
36126000Smtm
37126000Smtm#include "thr_private.h"
38126000Smtm
39126000Smtm__weak_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy);
40126000Smtm__weak_reference(_pthread_barrierattr_init, pthread_barrierattr_init);
41144518Sdavidxu__weak_reference(_pthread_barrierattr_setpshared,
42144518Sdavidxu	pthread_barrierattr_setpshared);
43126000Smtm__weak_reference(_pthread_barrierattr_getpshared,
44144518Sdavidxu	pthread_barrierattr_getpshared);
45126000Smtm
46126000Smtmint
47126000Smtm_pthread_barrierattr_destroy(pthread_barrierattr_t *attr)
48126000Smtm{
49144518Sdavidxu
50144518Sdavidxu	if (attr == NULL || *attr == NULL)
51126000Smtm		return (EINVAL);
52144518Sdavidxu
53126000Smtm	free(*attr);
54126000Smtm	return (0);
55126000Smtm}
56126000Smtm
57126000Smtmint
58144518Sdavidxu_pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr,
59144518Sdavidxu	int *pshared)
60126000Smtm{
61144518Sdavidxu
62144518Sdavidxu	if (attr == NULL || *attr == NULL)
63144518Sdavidxu		return (EINVAL);
64144518Sdavidxu
65144518Sdavidxu	*pshared = (*attr)->pshared;
66126000Smtm	return (0);
67126000Smtm}
68126000Smtm
69126000Smtmint
70144518Sdavidxu_pthread_barrierattr_init(pthread_barrierattr_t *attr)
71126000Smtm{
72144518Sdavidxu
73144518Sdavidxu	if (attr == NULL)
74126000Smtm		return (EINVAL);
75144518Sdavidxu
76144518Sdavidxu	if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL)
77144518Sdavidxu		return (ENOMEM);
78144518Sdavidxu
79144518Sdavidxu	(*attr)->pshared = PTHREAD_PROCESS_PRIVATE;
80126000Smtm	return (0);
81126000Smtm}
82126000Smtm
83126000Smtmint
84126000Smtm_pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared)
85126000Smtm{
86144518Sdavidxu
87144518Sdavidxu	if (attr == NULL || *attr == NULL)
88126000Smtm		return (EINVAL);
89144518Sdavidxu
90144518Sdavidxu	/* Only PTHREAD_PROCESS_PRIVATE is supported. */
91144518Sdavidxu	if (pshared != PTHREAD_PROCESS_PRIVATE)
92144518Sdavidxu		return (EINVAL);
93144518Sdavidxu
94144518Sdavidxu	(*attr)->pshared = pshared;
95126000Smtm	return (0);
96126000Smtm}
97