simplify pthread_attr_t stack/guard size representation

previously, the pthread_attr_t object was always initialized all-zero,
and stack/guard size were represented as differences versus their
defaults. this required lots of confusing offset arithmetic everywhere
they were used. instead, have pthread_attr_init fill in the default
values, and work with absolute sizes everywhere.
This commit is contained in:
Rich Felker
2016-11-07 20:47:24 -05:00
parent 7442442ccc
commit 33ce920857
7 changed files with 13 additions and 11 deletions
+3 -3
View File
@@ -208,7 +208,7 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att
if (attr._a_stackaddr) {
size_t need = libc.tls_size + __pthread_tsd_size;
size = attr._a_stacksize + DEFAULT_STACK_SIZE;
size = attr._a_stacksize;
stack = (void *)(attr._a_stackaddr & -16);
stack_limit = (void *)(attr._a_stackaddr - size);
/* Use application-provided stack for TLS only when
@@ -223,8 +223,8 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att
guard = 0;
}
} else {
guard = ROUND(DEFAULT_GUARD_SIZE + attr._a_guardsize);
size = guard + ROUND(DEFAULT_STACK_SIZE + attr._a_stacksize
guard = ROUND(attr._a_guardsize);
size = guard + ROUND(attr._a_stacksize
+ libc.tls_size + __pthread_tsd_size);
}