master
 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
 8int 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
28int 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}