about summary refs log tree commit diff
path: root/src/thread
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread')
-rw-r--r--src/thread/pthread_attr_get.c6
-rw-r--r--src/thread/pthread_attr_init.c2
-rw-r--r--src/thread/pthread_attr_setguardsize.c2
-rw-r--r--src/thread/pthread_attr_setstack.c2
-rw-r--r--src/thread/pthread_attr_setstacksize.c2
-rw-r--r--src/thread/pthread_create.c6
-rw-r--r--src/thread/pthread_getattr_np.c4
7 files changed, 13 insertions, 11 deletions
diff --git a/src/thread/pthread_attr_get.c b/src/thread/pthread_attr_get.c
index 3d296bf3..4aa5afdb 100644
--- a/src/thread/pthread_attr_get.c
+++ b/src/thread/pthread_attr_get.c
@@ -7,7 +7,7 @@ int pthread_attr_getdetachstate(const pthread_attr_t *a, int *state)
 }
 int pthread_attr_getguardsize(const pthread_attr_t *restrict a, size_t *restrict size)
 {
-	*size = a->_a_guardsize + DEFAULT_GUARD_SIZE;
+	*size = a->_a_guardsize;
 	return 0;
 }
 
@@ -39,14 +39,14 @@ int pthread_attr_getstack(const pthread_attr_t *restrict a, void **restrict addr
 {
 	if (!a->_a_stackaddr)
 		return EINVAL;
-	*size = a->_a_stacksize + DEFAULT_STACK_SIZE;
+	*size = a->_a_stacksize;
 	*addr = (void *)(a->_a_stackaddr - *size);
 	return 0;
 }
 
 int pthread_attr_getstacksize(const pthread_attr_t *restrict a, size_t *restrict size)
 {
-	*size = a->_a_stacksize + DEFAULT_STACK_SIZE;
+	*size = a->_a_stacksize;
 	return 0;
 }
 
diff --git a/src/thread/pthread_attr_init.c b/src/thread/pthread_attr_init.c
index 969e0a38..8f6e3374 100644
--- a/src/thread/pthread_attr_init.c
+++ b/src/thread/pthread_attr_init.c
@@ -3,5 +3,7 @@
 int pthread_attr_init(pthread_attr_t *a)
 {
 	*a = (pthread_attr_t){0};
+	a->_a_stacksize = DEFAULT_STACK_SIZE;
+	a->_a_guardsize = DEFAULT_GUARD_SIZE;
 	return 0;
 }
diff --git a/src/thread/pthread_attr_setguardsize.c b/src/thread/pthread_attr_setguardsize.c
index 9f21d247..1c5c60ac 100644
--- a/src/thread/pthread_attr_setguardsize.c
+++ b/src/thread/pthread_attr_setguardsize.c
@@ -3,6 +3,6 @@
 int pthread_attr_setguardsize(pthread_attr_t *a, size_t size)
 {
 	if (size > SIZE_MAX/8) return EINVAL;
-	a->_a_guardsize = size - DEFAULT_GUARD_SIZE;
+	a->_a_guardsize = size;
 	return 0;
 }
diff --git a/src/thread/pthread_attr_setstack.c b/src/thread/pthread_attr_setstack.c
index 61707a31..1eddcbd6 100644
--- a/src/thread/pthread_attr_setstack.c
+++ b/src/thread/pthread_attr_setstack.c
@@ -4,6 +4,6 @@ int pthread_attr_setstack(pthread_attr_t *a, void *addr, size_t size)
 {
 	if (size-PTHREAD_STACK_MIN > SIZE_MAX/4) return EINVAL;
 	a->_a_stackaddr = (size_t)addr + size;
-	a->_a_stacksize = size - DEFAULT_STACK_SIZE;
+	a->_a_stacksize = size;
 	return 0;
 }
diff --git a/src/thread/pthread_attr_setstacksize.c b/src/thread/pthread_attr_setstacksize.c
index 09d3fda7..9c6a8806 100644
--- a/src/thread/pthread_attr_setstacksize.c
+++ b/src/thread/pthread_attr_setstacksize.c
@@ -4,6 +4,6 @@ int pthread_attr_setstacksize(pthread_attr_t *a, size_t size)
 {
 	if (size-PTHREAD_STACK_MIN > SIZE_MAX/4) return EINVAL;
 	a->_a_stackaddr = 0;
-	a->_a_stacksize = size - DEFAULT_STACK_SIZE;
+	a->_a_stacksize = size;
 	return 0;
 }
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
index 9f6b98e6..db9e575e 100644
--- a/src/thread/pthread_create.c
+++ b/src/thread/pthread_create.c
@@ -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);
 	}
 
diff --git a/src/thread/pthread_getattr_np.c b/src/thread/pthread_getattr_np.c
index 10ea5127..ae26a5ab 100644
--- a/src/thread/pthread_getattr_np.c
+++ b/src/thread/pthread_getattr_np.c
@@ -9,7 +9,7 @@ int pthread_getattr_np(pthread_t t, pthread_attr_t *a)
 	a->_a_detach = !!t->detached;
 	if (t->stack) {
 		a->_a_stackaddr = (uintptr_t)t->stack;
-		a->_a_stacksize = t->stack_size - DEFAULT_STACK_SIZE;
+		a->_a_stacksize = t->stack_size;
 	} else {
 		char *p = (void *)libc.auxv;
 		size_t l = PAGE_SIZE;
@@ -17,7 +17,7 @@ int pthread_getattr_np(pthread_t t, pthread_attr_t *a)
 		a->_a_stackaddr = (uintptr_t)p;
 		while (mremap(p-l-PAGE_SIZE, PAGE_SIZE, 2*PAGE_SIZE, 0)==MAP_FAILED && errno==ENOMEM)
 			l += PAGE_SIZE;
-		a->_a_stacksize = l - DEFAULT_STACK_SIZE;
+		a->_a_stacksize = l;
 	}
 	return 0;
 }