提交 a14fdfd2 编写于 作者: G guzhihao4

Fix signal stack release

Uses sigaltstack to get current signal stack
There is no need to record in pthread structure

Issue: #I716J1
Signed-off-by: Nguzhihao4 <guzhihao4@huawei.com>
Change-Id: I22298f9bf1f7a55a10002fba70f9e05ba6b14979
上级 d89c65c8
...@@ -74,9 +74,6 @@ struct pthread { ...@@ -74,9 +74,6 @@ struct pthread {
volatile int killlock[1]; volatile int killlock[1];
char *dlerror_buf; char *dlerror_buf;
void *stdio_locks; void *stdio_locks;
#ifdef RESERVE_SIGNAL_STACK
void *signal_stack;
#endif
/* Part 3 -- the positions of these fields relative to /* Part 3 -- the positions of these fields relative to
* the end of the structure is external and internal ABI. */ * the end of the structure is external and internal ABI. */
......
...@@ -61,7 +61,6 @@ void __pthread_reserve_signal_stack() ...@@ -61,7 +61,6 @@ void __pthread_reserve_signal_stack()
sigaltstack(&signal_stack, NULL); sigaltstack(&signal_stack, NULL);
pthread_t self = __pthread_self(); pthread_t self = __pthread_self();
self->signal_stack = stack;
char name[ANON_STACK_NAME_SIZE]; char name[ANON_STACK_NAME_SIZE];
snprintf(name, ANON_STACK_NAME_SIZE, "signal_stack:%d", __pthread_self()->tid); snprintf(name, ANON_STACK_NAME_SIZE, "signal_stack:%d", __pthread_self()->tid);
prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, signal_stack.ss_sp, signal_stack.ss_size, name); prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, signal_stack.ss_sp, signal_stack.ss_size, name);
...@@ -70,17 +69,13 @@ void __pthread_reserve_signal_stack() ...@@ -70,17 +69,13 @@ void __pthread_reserve_signal_stack()
void __pthread_release_signal_stack() void __pthread_release_signal_stack()
{ {
pthread_t self = __pthread_self(); stack_t signal_stack, old_stack;
if (self->signal_stack == NULL) {
return;
}
stack_t signal_stack;
memset(&signal_stack, 0, sizeof(signal_stack)); memset(&signal_stack, 0, sizeof(signal_stack));
signal_stack.ss_flags = SS_DISABLE; signal_stack.ss_flags = SS_DISABLE;
sigaltstack(&signal_stack, NULL); sigaltstack(&signal_stack, &old_stack);
munmap(self->signal_stack, RESERVE_SIGNAL_STACK_SIZE); if (old_stack.ss_flags != SS_DISABLE) {
self->signal_stack = NULL; munmap(old_stack.ss_sp, old_stack.ss_size);
}
} }
weak_alias(__pthread_reserve_signal_stack, pthread_reserve_signal_stack); weak_alias(__pthread_reserve_signal_stack, pthread_reserve_signal_stack);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册