aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/pthread_create.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 1430686..34cc37d 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -447,13 +447,19 @@ __pthread_create_2_1 (newthread, attr, start_routine, arg)
/* Pass the descriptor to the caller. */
*newthread = (pthread_t) pd;
+ /* Remember whether the thread is detached or not. In case of an
+ error we have to free the stacks of non-detached stillborn
+ threads. */
+ bool is_detached = IS_DETACHED (pd);
+
/* Start the thread. */
err = create_thread (pd, iattr, STACK_VARIABLES_ARGS);
if (err != 0)
{
errout:
/* Something went wrong. Free the resources. */
- __deallocate_stack (pd);
+ if (!is_detached)
+ __deallocate_stack (pd);
return err;
}