> Because POSIX mandates that it do so? > > man 3 signal tells us: > > The handled signal is unblocked when the function returns and the process > continues from where it left off when the signal occurred. Unlike previ- > ous signal facilities, the handler func() remains installed after a sig- > nal has been delivered. > > If you want this to not happen, you should explicitly uninstall the > handler, or you should call abort(3) (or _exit(2), if you don't want > to leave a core dump).
Even though this is probably about my misunderstanding of things I post here the test I used. Vaclav Haisman #include <signal.h> #include <stdlib.h> #include <iostream> int f (int * x); void handler (int, siginfo_t * info, ucontext_t * uap) { std::cerr << "SIGSEGV has been caught" << std::endl; struct sigaction mysig; mysig.sa_handler = SIG_DFL; mysig.sa_sigaction = NULL; mysig.sa_flags = 0; if (sigaction(SIGSEGV, &mysig, NULL) == -1) { std::cerr << "Error in sigaction()" << std::endl; abort(); } f((int*)NULL); /*mysig.sa_handler = SIG_DFL; mysig.sa_sigaction = NULL; mysig.sa_flags = 0; if (sigaction(SIGSEGV, &mysig, NULL) == -1) { std::cerr << "Error in sigaction()" << std::endl; return; }*/ } int f (int * x) { int y = *x; return y; } int main () { struct sigaction mysig; mysig.sa_handler = NULL; mysig.sa_sigaction = (void (*)(int, __siginfo *, void *))handler; sigemptyset(&mysig.sa_mask); sigaddset(&mysig.sa_mask, SIGSEGV); mysig.sa_flags = SA_SIGINFO; if (sigaction(SIGSEGV, &mysig, NULL) == -1) { std::cerr << "Error in sigaction()" << std::endl; return 1; } int * x = NULL; int y; y = f(x); return y; } To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-hackers" in the body of the message