361702cc9b06eccf3f70b6f4cb5f6e07302b35fc
[kopensolaris-gnu/glibc.git] / nptl / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / pthread_mutex_init.c
1 /* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008
2    Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
5    OpenSolaris bits contributed by David Bartley
6     <dtbartle@csclub.uwaterloo.ca>, 2008.
7
8    The GNU C Library is free software; you can redistribute it and/or
9    modify it under the terms of the GNU Lesser General Public
10    License as published by the Free Software Foundation; either
11    version 2.1 of the License, or (at your option) any later version.
12
13    The GNU C Library is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    Lesser General Public License for more details.
17
18    You should have received a copy of the GNU Lesser General Public
19    License along with the GNU C Library; if not, write to the Free
20    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21    02111-1307 USA.  */
22
23 #include <assert.h>
24 #include <errno.h>
25 #include <string.h>
26 #include <pthreadP.h>
27 #include <sys/synch.h>
28 #include <synch_priv.h>
29
30 static const struct pthread_mutexattr default_attr =
31   {
32     /* Default is a normal mutex, not shared between processes.  */
33     .mutexkind = PTHREAD_MUTEX_NORMAL
34   };
35
36
37 int
38 __pthread_mutex_init (mutex, mutexattr)
39      pthread_mutex_t *mutex;
40      const pthread_mutexattr_t *mutexattr;
41 {
42   const struct pthread_mutexattr *imutexattr;
43
44   imutexattr = (const struct pthread_mutexattr *) mutexattr ?: &default_attr;
45
46   int ceiling = (imutexattr->mutexkind & PTHREAD_MUTEXATTR_PRIO_CEILING_MASK)
47       >> PTHREAD_MUTEXATTR_PRIO_CEILING_SHIFT;
48
49   return mutex_init ((mutex_t *)mutex, imutexattr->mutexkind, (void *)ceiling);
50 }
51 strong_alias (__pthread_mutex_init, pthread_mutex_init)
52 INTDEF(__pthread_mutex_init)