pthread_setattr_default_np.c 931 B

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