LKML Archive on
help / color / mirror / Atom feed
From: Linus Torvalds <>
To: Bruce Perens <>
Cc: Ulrich Drepper <>,
	Kernel Mailing List <>
Subject: Re: Never mind. Re: Signal left blocked after signal handler.
Date: Wed, 26 Nov 2003 10:45:41 -0800 (PST)	[thread overview]
Message-ID: <> (raw)
In-Reply-To: <>

On Wed, 26 Nov 2003, Bruce Perens wrote:
> The test code works on 2.4, but the electric fence confidence test does
> not. Maybe something odd with SIGSEGV, which is
> what that confidence test is catching. I will go back and see why.

One difference in 2.4.x and 2.6.x is the signal blocking wrt blocked
signals that are _forced_ (ie anything that is thread-synchronous, like a
SIGSEGV/SIGTRAP/SIGBUS that happens as a result of a fault):

 - in 2.4.x they will just punch through the block
 - in 2.6.x they will refuse to punch through a blocked signal, but
   since they can't be delivered they will cause the process to be

Trivial test program:

	#include <signal.h>
	#include <stdlib.h>

	void sigsegv(int sig)
		*(int *)0=0;

	int main(int argc, char **argv)
		struct sigaction sa = { .sa_handler = sigsegv };

		sigaction(SIGSEGV, &sa, NULL);
		*(int *)0 = 0;

and in 2.4.x this will cause infinte SIGSEGV's (well, they'll be caught by
the stack size eventually, but you see the problem: do a "strace" to see
what's going on). In 2.6.x the second SIGSEGV will just kill the program

If you _want_ the recursive behaviour, you should add

	.sa_flags = SA_NODEFER

to the sigaction initializer.

I don't understand why your test-program works differently on 2.4.x,
though, since a "kill()" system call is _not_ thread-synchronous, and
should never punch through anything. Not even on 2.4.x.


  parent reply	other threads:[~2003-11-26 18:45 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-11-26 17:39 Bruce Perens
2003-11-26 17:55 ` Linus Torvalds
     [not found]   ` <>
2003-11-26 18:21     ` Linus Torvalds
     [not found]     ` <>
2003-11-26 18:34       ` Linus Torvalds
     [not found]       ` <>
2003-11-26 18:45         ` Linus Torvalds [this message]
2003-11-26 19:04           ` Never mind. " Bruce Perens
2003-11-26 19:14             ` Linus Torvalds
2003-11-26 19:34               ` Posix says "undefined". " Bruce Perens
2003-11-26 19:52               ` Never mind. " Jamie Lokier
2003-11-27  9:20 ` Herbert Xu
2003-11-26 21:53 Never mind. " Albert Cahalan
2003-11-27  9:11 ` Ingo Oeser
2003-11-27 15:45   ` Albert Cahalan
2003-11-27 17:26     ` Jörn Engel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \ \
    --subject='Re: Never mind. Re: Signal left blocked after signal handler.' \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).