1*83f153ceSSiva Chandra Reddy //===-- Implementation of the pthread_mutexattr_setrobust -----------------===//
2*83f153ceSSiva Chandra Reddy //
3*83f153ceSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*83f153ceSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5*83f153ceSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*83f153ceSSiva Chandra Reddy //
7*83f153ceSSiva Chandra Reddy //===----------------------------------------------------------------------===//
8*83f153ceSSiva Chandra Reddy 
9*83f153ceSSiva Chandra Reddy #include "pthread_mutexattr_setrobust.h"
10*83f153ceSSiva Chandra Reddy #include "pthread_mutexattr.h"
11*83f153ceSSiva Chandra Reddy 
12*83f153ceSSiva Chandra Reddy #include "src/__support/common.h"
13*83f153ceSSiva Chandra Reddy 
14*83f153ceSSiva Chandra Reddy #include <errno.h>
15*83f153ceSSiva Chandra Reddy #include <pthread.h>
16*83f153ceSSiva Chandra Reddy 
17*83f153ceSSiva Chandra Reddy namespace __llvm_libc {
18*83f153ceSSiva Chandra Reddy 
19*83f153ceSSiva Chandra Reddy LLVM_LIBC_FUNCTION(int, pthread_mutexattr_setrobust,
20*83f153ceSSiva Chandra Reddy                    (pthread_mutexattr_t *__restrict attr, int robust)) {
21*83f153ceSSiva Chandra Reddy   if (robust != PTHREAD_MUTEX_STALLED && robust != PTHREAD_MUTEX_ROBUST)
22*83f153ceSSiva Chandra Reddy     return EINVAL;
23*83f153ceSSiva Chandra Reddy   pthread_mutexattr_t old = *attr;
24*83f153ceSSiva Chandra Reddy   old &= ~unsigned(PThreadMutexAttrPos::ROBUST_MASK);
25*83f153ceSSiva Chandra Reddy   *attr = old | (robust << unsigned(PThreadMutexAttrPos::ROBUST_SHIFT));
26*83f153ceSSiva Chandra Reddy   return 0;
27*83f153ceSSiva Chandra Reddy }
28*83f153ceSSiva Chandra Reddy 
29*83f153ceSSiva Chandra Reddy } // namespace __llvm_libc
30