--- ./arch/i386/kernel/signal.c.nocallhndlr Wed Mar 27 10:56:29 2002 +++ ./arch/i386/kernel/signal.c Thu Apr 4 13:10:30 2002 @@ -558,22 +558,25 @@ } } - /* Set up the stack frame */ - if (ka->sa.sa_flags & SA_SIGINFO) - setup_rt_frame(sig, ka, info, oldset, regs); - else - setup_frame(sig, ka, oldset, regs); + /* Set up the stack frame if we are calling the handler. */ + if (! (ka->sa.sa_flags & SA_NOCALLHNDLR)) { + if (ka->sa.sa_flags & SA_SIGINFO) + setup_rt_frame(sig, ka, info, oldset, regs); + else + setup_frame(sig, ka, oldset, regs); + + if (!(ka->sa.sa_flags & SA_NODEFER)) { + spin_lock_irq(¤t->sigmask_lock); + sigorsets(¤t->blocked,¤t->blocked, + &ka->sa.sa_mask); + sigaddset(¤t->blocked,sig); + recalc_sigpending(current); + spin_unlock_irq(¤t->sigmask_lock); + } + } if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; - - if (!(ka->sa.sa_flags & SA_NODEFER)) { - spin_lock_irq(¤t->sigmask_lock); - sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); - sigaddset(¤t->blocked,sig); - recalc_sigpending(current); - spin_unlock_irq(¤t->sigmask_lock); - } } /* --- ./include/asm-i386/signal.h.nocallhndlr Wed Mar 27 10:56:12 2002 +++ ./include/asm-i386/signal.h Thu Apr 4 13:02:07 2002 @@ -91,6 +91,7 @@ #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 +#define SA_NOCALLHNDLR 0x00800000 /* Don't really call the handler. */ #define SA_NOMASK SA_NODEFER #define SA_ONESHOT SA_RESETHAND