提交 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 {
volatile int killlock[1];
char *dlerror_buf;
void *stdio_locks;
#ifdef RESERVE_SIGNAL_STACK
void *signal_stack;
#endif
/* Part 3 -- the positions of these fields relative to
* the end of the structure is external and internal ABI. */
......
......@@ -61,7 +61,6 @@ void __pthread_reserve_signal_stack()
sigaltstack(&signal_stack, NULL);
pthread_t self = __pthread_self();
self->signal_stack = stack;
char name[ANON_STACK_NAME_SIZE];
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);
......@@ -70,17 +69,13 @@ void __pthread_reserve_signal_stack()
void __pthread_release_signal_stack()
{
pthread_t self = __pthread_self();
if (self->signal_stack == NULL) {
return;
}
stack_t signal_stack;
stack_t signal_stack, old_stack;
memset(&signal_stack, 0, sizeof(signal_stack));
signal_stack.ss_flags = SS_DISABLE;
sigaltstack(&signal_stack, NULL);
munmap(self->signal_stack, RESERVE_SIGNAL_STACK_SIZE);
self->signal_stack = NULL;
sigaltstack(&signal_stack, &old_stack);
if (old_stack.ss_flags != SS_DISABLE) {
munmap(old_stack.ss_sp, old_stack.ss_size);
}
}
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.
先完成此消息的编辑!
想要评论请 注册