diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h index 26e6e1df..e73a251f 100644 --- a/src/internal/pthread_impl.h +++ b/src/internal/pthread_impl.h @@ -182,12 +182,15 @@ hidden void __acquire_ptc(void); hidden void __release_ptc(void); hidden void __inhibit_ptc(void); -extern hidden size_t __default_stacksize; -extern hidden size_t __default_guardsize; +extern hidden unsigned __default_stacksize; +extern hidden unsigned __default_guardsize; #define DEFAULT_STACK_SIZE 81920 #define DEFAULT_GUARD_SIZE 4096 +#define DEFAULT_STACK_MAX (8<<20) +#define DEFAULT_GUARD_MAX (1<<20) + #define __ATTRP_C11_THREAD ((void*)(uintptr_t)-1) #endif diff --git a/src/thread/default_attr.c b/src/thread/default_attr.c index 46fe98ee..dce96409 100644 --- a/src/thread/default_attr.c +++ b/src/thread/default_attr.c @@ -1,4 +1,4 @@ #include "pthread_impl.h" -size_t __default_stacksize = DEFAULT_STACK_SIZE; -size_t __default_guardsize = DEFAULT_GUARD_SIZE; +unsigned __default_stacksize = DEFAULT_STACK_SIZE; +unsigned __default_guardsize = DEFAULT_GUARD_SIZE; diff --git a/src/thread/pthread_setattr_default_np.c b/src/thread/pthread_setattr_default_np.c index 256f0685..58486220 100644 --- a/src/thread/pthread_setattr_default_np.c +++ b/src/thread/pthread_setattr_default_np.c @@ -2,6 +2,9 @@ #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. */ @@ -11,11 +14,12 @@ int pthread_setattr_default_np(const pthread_attr_t *attrp) 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(); - if (attrp->_a_stacksize >= __default_stacksize) - __default_stacksize = attrp->_a_stacksize; - if (attrp->_a_guardsize >= __default_guardsize) - __default_guardsize = attrp->_a_guardsize; + __default_stacksize = MAX(__default_stacksize, stack); + __default_guardsize = MAX(__default_guardsize, guard); __release_ptc(); return 0;