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