diff options
Diffstat (limited to 'src/thread')
-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; } |