--- ./arch/i386/kernel/signal.c.nocallhndlr Wed Mar 27 10:56:29 2002 +++ ./arch/i386/kernel/signal.c Wed Mar 27 11:04:45 2002 @@ -558,21 +558,24 @@ } } - /* 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); - 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); + /* Set up the stack frame */ + 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); + } } } --- ./include/asm-i386/signal.h.nocallhndlr Wed Mar 27 10:56:12 2002 +++ ./include/asm-i386/signal.h Wed Mar 27 11:17:38 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