diff --git a/lib/libvgl/main.c b/lib/libvgl/main.c index 12f2c648d0e3..1408ddb53753 100644 --- a/lib/libvgl/main.c +++ b/lib/libvgl/main.c @@ -31,9 +31,9 @@ #include __FBSDID("$FreeBSD$"); +#include #include #include -#include #include #include #include @@ -107,14 +107,22 @@ struct vt_mode smode; } static void -VGLAbort(int arg __unused) +VGLAbort(int arg) { + sigset_t mask; + VGLAbortPending = 1; signal(SIGINT, SIG_IGN); signal(SIGTERM, SIG_IGN); - signal(SIGSEGV, SIG_IGN); - signal(SIGBUS, SIG_IGN); signal(SIGUSR2, SIG_IGN); + if (arg == SIGBUS || arg == SIGSEGV) { + signal(arg, SIG_DFL); + sigemptyset(&mask); + sigaddset(&mask, arg); + sigprocmask(SIG_UNBLOCK, &mask, NULL); + VGLEnd(); + kill(getpid(), arg); + } } static void