diff options
| -rw-r--r-- | src/thread/pthread_mutexattr_setrobust.c | 18 | 
1 files changed, 17 insertions, 1 deletions
| diff --git a/src/thread/pthread_mutexattr_setrobust.c b/src/thread/pthread_mutexattr_setrobust.c index dcfa4cf1..04db92a6 100644 --- a/src/thread/pthread_mutexattr_setrobust.c +++ b/src/thread/pthread_mutexattr_setrobust.c @@ -1,9 +1,25 @@  #include "pthread_impl.h" +#include "syscall.h" + +static pthread_once_t check_robust_once; +static int check_robust_result; + +static void check_robust() +{ +	void *p; +	size_t l; +	check_robust_result = -__syscall(SYS_get_robust_list, 0, &p, &l); +}  int pthread_mutexattr_setrobust(pthread_mutexattr_t *a, int robust)  {  	if (robust > 1U) return EINVAL; +	if (robust) { +		pthread_once(&check_robust_once, check_robust); +		if (check_robust_result) return check_robust_result; +		a->__attr |= 4; +		return 0; +	}  	a->__attr &= ~4; -	a->__attr |= robust*4;  	return 0;  } | 
