Messages in this thread Patch in this message | | | Subject | Re: [PATCH] 3/3 Generic sys_rt_sigsuspend | From | David Woodhouse <> | Date | Tue, 29 Nov 2005 10:42:03 +0000 |
| |
On Tue, 2005-11-29 at 07:18 +0200, Mika Penttilä wrote: > You are not setting saved_sigmask here.
Oops; well spotted. Thanks.
> And shouldn't it return -EINTR?
I believe not. The previous versions would loop until do_signal() returned non-zero; i.e. until a signal was actually delivered. By returning -ERESTARTNOHAND we achieve the same effect. If there's a signal delivered, that gets magically converted to -EINTR, but if there's no signal delivered, the syscall gets restarted.
diff -u b/kernel/compat.c b/kernel/compat.c --- b/kernel/compat.c +++ b/kernel/compat.c @@ -859,7 +859,7 @@ #ifdef __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, compat_size_t sigsetsize) { - sigset_t saveset, newset; + sigset_t newset; compat_sigset_t newset32; /* XXX: Don't preclude handling different sized sigset_t's. */ @@ -872,7 +872,7 @@ sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP)); spin_lock_irq(¤t->sighand->siglock); - saveset = current->blocked; + current->saved_sigmask = current->blocked; current->blocked = newset; recalc_sigpending(); spin_unlock_irq(¤t->sighand->siglock); diff -u b/kernel/signal.c b/kernel/signal.c --- b/kernel/signal.c +++ b/kernel/signal.c @@ -2626,7 +2626,7 @@ #ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize) { - sigset_t saveset, newset; + sigset_t newset; /* XXX: Don't preclude handling different sized sigset_t's. */ if (sigsetsize != sizeof(sigset_t)) @@ -2637,7 +2637,7 @@ sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP)); spin_lock_irq(¤t->sighand->siglock); - saveset = current->blocked; + current->saved_sigmask = current->blocked; current->blocked = newset; recalc_sigpending(); spin_unlock_irq(¤t->sighand->siglock);
-- dwmw2
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |