github.com/afumu/libc@v0.0.6/musl/src/thread/pthread_setattr_default_np.c (about)

     1  #define _GNU_SOURCE
     2  #include "pthread_impl.h"
     3  #include <string.h>
     4  
     5  #define MIN(a,b) ((a)<(b) ? (a) : (b))
     6  #define MAX(a,b) ((a)>(b) ? (a) : (b))
     7  
     8  int pthread_setattr_default_np(const pthread_attr_t *attrp)
     9  {
    10  	/* Reject anything in the attr object other than stack/guard size. */
    11  	pthread_attr_t tmp = *attrp, zero = { 0 };
    12  	tmp._a_stacksize = 0;
    13  	tmp._a_guardsize = 0;
    14  	if (memcmp(&tmp, &zero, sizeof tmp))
    15  		return EINVAL;
    16  
    17  	unsigned stack = MIN(attrp->_a_stacksize, DEFAULT_STACK_MAX);
    18  	unsigned guard = MIN(attrp->_a_guardsize, DEFAULT_GUARD_MAX);
    19  
    20  	__inhibit_ptc();
    21  	__default_stacksize = MAX(__default_stacksize, stack);
    22  	__default_guardsize = MAX(__default_guardsize, guard);
    23  	__release_ptc();
    24  
    25  	return 0;
    26  }
    27  
    28  int pthread_getattr_default_np(pthread_attr_t *attrp)
    29  {
    30  	__acquire_ptc();
    31  	*attrp = (pthread_attr_t) {
    32  		._a_stacksize = __default_stacksize,
    33  		._a_guardsize = __default_guardsize,
    34  	};
    35  	__release_ptc();
    36  	return 0;
    37  }