mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 06:58:22 +00:00
signal: fix signal_suspend and restoring signal mask
This commit is contained in:
@@ -148,8 +148,9 @@ void signal_suspend(sigset_t *sigset) {
|
|||||||
thread_t *thread = current_thread();
|
thread_t *thread = current_thread();
|
||||||
THREAD_ENTER(thread);
|
THREAD_ENTER(thread);
|
||||||
|
|
||||||
|
sigset_t oldmask = thread->signals.mask;
|
||||||
memcpy(&thread->signals.mask, sigset, sizeof(sigset_t));
|
memcpy(&thread->signals.mask, sigset, sizeof(sigset_t));
|
||||||
signal_returnmask(thread, sigset);
|
signal_returnmask(thread, &oldmask);
|
||||||
|
|
||||||
THREAD_LEAVE(thread);
|
THREAD_LEAVE(thread);
|
||||||
|
|
||||||
@@ -586,7 +587,7 @@ bool signal_check(struct thread_t *thread, context_t *context, bool syscall, uin
|
|||||||
if ((action->flags & SA_NODEFER) == 0)
|
if ((action->flags & SA_NODEFER) == 0)
|
||||||
SIGNAL_SETON(&thread->signals.mask, signal);
|
SIGNAL_SETON(&thread->signals.mask, signal);
|
||||||
|
|
||||||
for (int i = 1; i < signal; ++i) {
|
for (int i = 1; i < NSIG; ++i) {
|
||||||
if (SIGNAL_GET(&action->mask, i) == 0)
|
if (SIGNAL_GET(&action->mask, i) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user