diff options
author | Florian Weimer <fweimer@redhat.com> | 2021-05-11 11:08:00 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2021-05-11 11:24:36 +0200 |
commit | 8fbb33b3f74560ea3c74d289bdf59cffce52b463 (patch) | |
tree | ce89a60001d8a815ac5aba3fe6511b03609302b3 /nptl/nptl_free_tcb.c | |
parent | c79a31fb36fe265f7566bea622849b06c94b4022 (diff) | |
download | glibc-8fbb33b3f74560ea3c74d289bdf59cffce52b463.tar glibc-8fbb33b3f74560ea3c74d289bdf59cffce52b463.tar.gz glibc-8fbb33b3f74560ea3c74d289bdf59cffce52b463.tar.bz2 glibc-8fbb33b3f74560ea3c74d289bdf59cffce52b463.zip |
nptl: Move __free_tcb into libc
Under the name __nptl_free_tcb.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'nptl/nptl_free_tcb.c')
-rw-r--r-- | nptl/nptl_free_tcb.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/nptl/nptl_free_tcb.c b/nptl/nptl_free_tcb.c new file mode 100644 index 0000000000..cbf3580f59 --- /dev/null +++ b/nptl/nptl_free_tcb.c @@ -0,0 +1,45 @@ +/* TCB deallocation for NPTL. + Copyright (C) 2002-2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <nptl-stack.h> +#include <pthreadP.h> +#include <stdlib.h> + +void +__nptl_free_tcb (struct pthread *pd) +{ + /* The thread is exiting now. */ + if (atomic_bit_test_set (&pd->cancelhandling, TERMINATED_BIT) == 0) + { + /* Free TPP data. */ + if (pd->tpp != NULL) + { + struct priority_protection_data *tpp = pd->tpp; + + pd->tpp = NULL; + free (tpp); + } + + /* Queue the stack memory block for reuse and exit the process. The + kernel will signal via writing to the address returned by + QUEUE-STACK when the stack is available. */ + __nptl_deallocate_stack (pd); + } +} +libc_hidden_def (__nptl_free_tcb) |