未验证 提交 88e4b3f5 编写于 作者: O openharmony_ci 提交者: Gitee

!921 Fix signal stack release cherry-pick Beta1

Merge pull request !921 from guzhihao4/cherry-pick-1685154057
......@@ -74,6 +74,9 @@ 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,6 +61,7 @@ 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);
......@@ -69,13 +70,20 @@ 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, old_stack;
memset(&signal_stack, 0, sizeof(signal_stack));
signal_stack.ss_flags = SS_DISABLE;
sigaltstack(&signal_stack, &old_stack);
munmap(self->signal_stack, __default_guardsize);
if (old_stack.ss_flags != SS_DISABLE) {
munmap(old_stack.ss_sp, old_stack.ss_size);
}
self->signal_stack = NULL;
}
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.
先完成此消息的编辑!
想要评论请 注册