pthread_setattr_default_np.c raw

   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  }
  38