提交 858d4cba 编写于 作者: O openharmony_ci 提交者: Gitee

!11 【bug】sigaction中sigsuspend的后执行信号顺序与预期不符,信号注册时未屏蔽用户传入信号屏蔽字段

Merge pull request !11 from give-me-five/master
...@@ -183,7 +183,19 @@ static void __sig_operation(unsigned int receivedSigno) ...@@ -183,7 +183,19 @@ static void __sig_operation(unsigned int receivedSigno)
void arm_signal_process(unsigned int receivedSig) void arm_signal_process(unsigned int receivedSig)
{ {
sigset_t mask, oldmask;
sigemptyset(&mask);
sigemptyset(&oldmask);
sigaddset(&mask, receivedSig);
sigprocmask(SIG_BLOCK, &mask, NULL);
__sig_operation(receivedSig); __sig_operation(receivedSig);
sigprocmask(SIG_BLOCK, NULL, &oldmask);
sigdelset(&oldmask, receivedSig);
sigprocmask(SIG_SETMASK, &oldmask, NULL);
} }
static void __sig_add_def_action() static void __sig_add_def_action()
...@@ -255,6 +267,7 @@ static int __sig_action_opr(int sig, const sigaction_t *act, sigaction_t *oact) ...@@ -255,6 +267,7 @@ static int __sig_action_opr(int sig, const sigaction_t *act, sigaction_t *oact)
sigact->act.sa_mask = act->sa_mask; sigact->act.sa_mask = act->sa_mask;
sigact->act.sa_flags = act->sa_flags; sigact->act.sa_flags = act->sa_flags;
} }
sigprocmask(SIG_BLOCK, &act->sa_mask, NULL);
pthread_spin_unlock(&sig_lite_lock); pthread_spin_unlock(&sig_lite_lock);
return ret; return ret;
} }
......
...@@ -3,5 +3,22 @@ ...@@ -3,5 +3,22 @@
int sigsuspend(const sigset_t *mask) int sigsuspend(const sigset_t *mask)
{ {
return syscall_cp(SYS_rt_sigsuspend, mask, _NSIG/8); int ret,retval;
} sigset_t oldset;
retval = sigprocmask(SIG_BLOCK, 0, &oldset);
if (retval != 0){
return retval;
}
ret = syscall_cp(SYS_rt_sigsuspend, mask, _NSIG/8);
if (ret == -1){
retval = sigprocmask(SIG_SETMASK, &oldset, 0);
if (retval != 0){
return retval;
}
}
return ret;
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册