#define _GNU_SOURCE #include "pthread_impl.h" #include #define MIN(a,b) ((a)<(b) ? (a) : (b)) #define MAX(a,b) ((a)>(b) ? (a) : (b)) int pthread_setattr_default_np(const pthread_attr_t *attrp) { /* Reject anything in the attr object other than stack/guard size. */ pthread_attr_t tmp = *attrp, zero = { 0 }; tmp._a_stacksize = 0; tmp._a_guardsize = 0; if (memcmp(&tmp, &zero, sizeof tmp)) return EINVAL; unsigned stack = MIN(attrp->_a_stacksize, DEFAULT_STACK_MAX); unsigned guard = MIN(attrp->_a_guardsize, DEFAULT_GUARD_MAX); __inhibit_ptc(); __default_stacksize = MAX(__default_stacksize, stack); __default_guardsize = MAX(__default_guardsize, guard); __release_ptc(); return 0; } int pthread_getattr_default_np(pthread_attr_t *attrp) { __acquire_ptc(); *attrp = (pthread_attr_t) { ._a_stacksize = __default_stacksize, ._a_guardsize = __default_guardsize, }; __release_ptc(); return 0; }