[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[hurd, commited 3/6] htl: Move cleanup stack to variable shared between
From: |
Samuel Thibault |
Subject: |
[hurd, commited 3/6] htl: Move cleanup stack to variable shared between libc and pthread |
Date: |
Sun, 14 Jun 2020 18:57:54 +0200 |
If libpthread gets loaded dynamically, the stack needs to already contain the
cleanup handlers of the main thread.
* htl/libc_pthread_init.c (__pthread_cleanup_stack): New per-thread variable.
* htl/Versions (libc): Add __pthread_cleanup_stack as private symbol.
* htl/pt-internal.h (struct __pthread): Remove cancelation_handlers
field.
(__pthread_cleanup_stack): Add variable declaration.
* htl/pt-alloc.c (initialize_pthread): Remove initialization of
cancelation_handlers field.
* htl/pt-cleanup.c (__pthread_get_cleanup_stack): Return the address of
__pthread_cleanup_stack instead of that of the cancelation_handlers
field.
* htl/forward.c: Include <pt-internal.h>.
(dummy_list): Remove variable.
(__pthread_get_cleanup_stack): Return the address of __pthread_cleanup_stack
instead of that of dummy_list.
---
htl/Versions | 1 +
htl/forward.c | 4 ++--
htl/libc_pthread_init.c | 2 ++
htl/pt-alloc.c | 2 --
htl/pt-cleanup.c | 2 +-
htl/pt-internal.h | 4 +++-
6 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/htl/Versions b/htl/Versions
index fd9eefbaee..832cc5d814 100644
--- a/htl/Versions
+++ b/htl/Versions
@@ -29,6 +29,7 @@ libc {
GLIBC_PRIVATE {
__libc_alloca_cutoff;
__libc_pthread_init;
+ __pthread_cleanup_stack;
}
}
diff --git a/htl/forward.c b/htl/forward.c
index dfb7b79327..544e7da058 100644
--- a/htl/forward.c
+++ b/htl/forward.c
@@ -23,6 +23,7 @@
#include <pthread-functions.h>
#include <libc-lock.h>
#include <fork.h>
+#include <pt-internal.h>
/* Pointers to the libc functions. */
struct pthread_functions __libc_pthread_functions attribute_hidden;
@@ -140,6 +141,5 @@ strong_alias (__pthread_setcancelstate,
pthread_setcancelstate);
FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
-struct __pthread_cancelation_handler *dummy_list;
FORWARD2 (__pthread_get_cleanup_stack, struct __pthread_cancelation_handler **,
- (void), (), return &dummy_list);
+ (void), (), return &__pthread_cleanup_stack);
diff --git a/htl/libc_pthread_init.c b/htl/libc_pthread_init.c
index cee92f76ee..f617c4e0be 100644
--- a/htl/libc_pthread_init.c
+++ b/htl/libc_pthread_init.c
@@ -19,6 +19,8 @@
#include <string.h>
#include <pthread-functions.h>
+__thread struct __pthread_cancelation_handler *__pthread_cleanup_stack;
+
void
__libc_pthread_init (const struct pthread_functions *functions)
{
diff --git a/htl/pt-alloc.c b/htl/pt-alloc.c
index d4426bb2e3..bf37aca729 100644
--- a/htl/pt-alloc.c
+++ b/htl/pt-alloc.c
@@ -65,8 +65,6 @@ initialize_pthread (struct __pthread *new)
new->state_lock = (pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER;
new->state_cond = (pthread_cond_t) PTHREAD_COND_INITIALIZER;
- new->cancelation_handlers = 0;
-
memset (&new->res_state, '\0', sizeof (new->res_state));
new->tcb = NULL;
diff --git a/htl/pt-cleanup.c b/htl/pt-cleanup.c
index a9a7c95847..7e6149bda9 100644
--- a/htl/pt-cleanup.c
+++ b/htl/pt-cleanup.c
@@ -23,6 +23,6 @@
struct __pthread_cancelation_handler **
__pthread_get_cleanup_stack (void)
{
- return &_pthread_self ()->cancelation_handlers;
+ return &__pthread_cleanup_stack;
}
hidden_def(__pthread_get_cleanup_stack)
diff --git a/htl/pt-internal.h b/htl/pt-internal.h
index 918c207c3e..e0baa6bcda 100644
--- a/htl/pt-internal.h
+++ b/htl/pt-internal.h
@@ -81,7 +81,6 @@ struct __pthread
int cancel_state;
int cancel_type;
int cancel_pending;
- struct __pthread_cancelation_handler *cancelation_handlers;
/* Thread stack. */
void *stackaddr;
@@ -197,6 +196,9 @@ extern pthread_rwlock_t __pthread_threads_lock;
#ifndef _pthread_self
extern struct __pthread *_pthread_self (void);
#endif
+
+/* Stores the stack of cleanup handlers for the thread. */
+extern __thread struct __pthread_cancelation_handler *__pthread_cleanup_stack;
/* Initialize the pthreads library. */
--
2.27.0
- [hurd,commited 0/6] Make write and pwrite64 cancellation points, Samuel Thibault, 2020/06/14
- [hurd, commited 3/6] htl: Move cleanup stack to variable shared between libc and pthread,
Samuel Thibault <=
- [hurd,commited 4/6] htl: Fix cleanup support for IO locking, Samuel Thibault, 2020/06/14
- [hurd, commited 5/6] hurd: Make write and pwrite64 cancellation points, Samuel Thibault, 2020/06/14
- [hurd, commited 1/6] htl: Add noreturn attribute on __pthread_exit forward, Samuel Thibault, 2020/06/14
- [hurd,commited 2/6] htl: initialize first and prevent from unloading, Samuel Thibault, 2020/06/14
- [hurd,commited 6/6] htl: Enable more cancellation tests, Samuel Thibault, 2020/06/14