thr_barrierattr.c revision 174689
1156772Sdeischen/*
2156772Sdeischen * Copyright (c) 2003 David Xu <davidxu@freebsd.org>.
3156772Sdeischen * All rights reserved.
4156772Sdeischen *
5156772Sdeischen * Redistribution and use in source and binary forms, with or without
6156772Sdeischen * modification, are permitted provided that the following conditions
7156772Sdeischen * are met:
8156772Sdeischen * 1. Redistributions of source code must retain the above copyright
9156772Sdeischen *    notice(s), this list of conditions and the following disclaimer as
10156772Sdeischen *    the first lines of this file unmodified other than the possible
11156772Sdeischen *    addition of one or more copyright notices.
12156772Sdeischen * 2. Redistributions in binary form must reproduce the above copyright
13156772Sdeischen *    notice(s), this list of conditions and the following disclaimer in the
14156772Sdeischen *    documentation and/or other materials provided with the distribution.
15156772Sdeischen *
16156772Sdeischen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
17156772Sdeischen * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18156772Sdeischen * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19156772Sdeischen * DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
20156772Sdeischen * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21156772Sdeischen * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22156772Sdeischen * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23156772Sdeischen * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24156772Sdeischen * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25156772Sdeischen * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26156772Sdeischen * DAMAGE.
27156772Sdeischen *
28156772Sdeischen * $FreeBSD: head/lib/libkse/thread/thr_barrierattr.c 174689 2007-12-16 23:29:57Z deischen $
29156772Sdeischen */
30156772Sdeischen
31156772Sdeischen#include "namespace.h"
32156772Sdeischen#include <errno.h>
33156772Sdeischen#include <stdlib.h>
34156772Sdeischen#include <pthread.h>
35156772Sdeischen#include "un-namespace.h"
36156772Sdeischen#include "thr_private.h"
37156772Sdeischen
38156772Sdeischen__weak_reference(_pthread_barrierattr_destroy, pthread_barrierattr_destroy);
39156772Sdeischen__weak_reference(_pthread_barrierattr_init, pthread_barrierattr_init);
40156772Sdeischen__weak_reference(_pthread_barrierattr_setpshared,
41156772Sdeischen	pthread_barrierattr_setpshared);
42156772Sdeischen__weak_reference(_pthread_barrierattr_getpshared,
43156772Sdeischen	pthread_barrierattr_getpshared);
44156772Sdeischen
45156772Sdeischenint
46156772Sdeischen_pthread_barrierattr_destroy(pthread_barrierattr_t *attr)
47156772Sdeischen{
48156772Sdeischen
49156772Sdeischen	if (attr == NULL || *attr == NULL)
50156772Sdeischen		return (EINVAL);
51156772Sdeischen
52156772Sdeischen	free(*attr);
53156772Sdeischen	return (0);
54156772Sdeischen}
55156772Sdeischen
56168963Sdeischenint
57156772Sdeischen_pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr,
58156772Sdeischen	int *pshared)
59156772Sdeischen{
60156772Sdeischen
61156772Sdeischen	if (attr == NULL || *attr == NULL)
62156772Sdeischen		return (EINVAL);
63156772Sdeischen
64156772Sdeischen	*pshared = (*attr)->pshared;
65156772Sdeischen	return (0);
66156772Sdeischen}
67156772Sdeischen
68156772Sdeischenint
69156772Sdeischen_pthread_barrierattr_init(pthread_barrierattr_t *attr)
70156772Sdeischen{
71156772Sdeischen
72156772Sdeischen	if (attr == NULL)
73156772Sdeischen		return (EINVAL);
74156772Sdeischen
75156772Sdeischen	if ((*attr = malloc(sizeof(struct pthread_barrierattr))) == NULL)
76156772Sdeischen		return (ENOMEM);
77156772Sdeischen
78156772Sdeischen	(*attr)->pshared = PTHREAD_PROCESS_PRIVATE;
79156772Sdeischen	return (0);
80156772Sdeischen}
81156772Sdeischen
82156772Sdeischenint
83156772Sdeischen_pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared)
84156772Sdeischen{
85156772Sdeischen
86156772Sdeischen	if (attr == NULL || *attr == NULL)
87156772Sdeischen		return (EINVAL);
88156772Sdeischen
89156772Sdeischen	/* Only PTHREAD_PROCESS_PRIVATE is supported. */
90156772Sdeischen	if (pshared != PTHREAD_PROCESS_PRIVATE)
91156772Sdeischen		return (EINVAL);
92156772Sdeischen
93156772Sdeischen	(*attr)->pshared = pshared;
94156772Sdeischen	return (0);
95156772Sdeischen}
96156772Sdeischen