aboutsummaryrefslogtreecommitdiff
path: root/lib/libvgl
diff options
context:
space:
mode:
authorKazutaka YOKOTA <yokota@FreeBSD.org>2001-07-24 11:15:20 +0000
committerKazutaka YOKOTA <yokota@FreeBSD.org>2001-07-24 11:15:20 +0000
commit16fc634b67ef55f745f6933ddd0c7503fa4e5f45 (patch)
tree2e95b7e1cb18d2be3e9263e665386e4230e549e9 /lib/libvgl
parentb2b50712a6520c00a117f4609564cffcd33f48ba (diff)
downloadsrc-16fc634b67ef55f745f6933ddd0c7503fa4e5f45.tar.gz
src-16fc634b67ef55f745f6933ddd0c7503fa4e5f45.zip
Notes
Diffstat (limited to 'lib/libvgl')
-rw-r--r--lib/libvgl/main.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/libvgl/main.c b/lib/libvgl/main.c
index 65222303fd7b..5da2047fabab 100644
--- a/lib/libvgl/main.c
+++ b/lib/libvgl/main.c
@@ -54,6 +54,7 @@ static int VGLOldMode;
static size_t VGLBufSize;
static byte *VGLMem = MAP_FAILED;
static int VGLSwitchPending;
+static int VGLAbortPending;
static int VGLOnDisplay;
static unsigned int VGLCurWindow;
static int VGLInitDone = 0;
@@ -67,6 +68,8 @@ struct vt_mode smode;
if (!VGLInitDone)
return;
VGLInitDone = 0;
+ VGLSwitchPending = 0;
+ VGLAbortPending = 0;
signal(SIGUSR1, SIG_IGN);
@@ -103,8 +106,12 @@ struct vt_mode smode;
static void
VGLAbort()
{
- VGLEnd();
- exit(0);
+ VGLAbortPending = 1;
+ signal(SIGINT, SIG_IGN);
+ signal(SIGTERM, SIG_IGN);
+ signal(SIGSEGV, SIG_IGN);
+ signal(SIGBUS, SIG_IGN);
+ signal(SIGUSR2, SIG_IGN);
}
static void
@@ -132,9 +139,11 @@ VGLInit(int mode)
signal(SIGTERM, VGLAbort);
signal(SIGSEGV, VGLAbort);
signal(SIGBUS, VGLAbort);
+ signal(SIGUSR2, SIG_IGN);
VGLOnDisplay = 1;
VGLSwitchPending = 0;
+ VGLAbortPending = 0;
if (ioctl(0, CONS_GET, &VGLOldMode) || ioctl(0, CONS_CURRENT, &adptype))
return -1;
@@ -322,6 +331,10 @@ VGLInit(int mode)
void
VGLCheckSwitch()
{
+ if (VGLAbortPending) {
+ VGLEnd();
+ exit(0);
+ }
while (VGLSwitchPending) {
unsigned int offset;
unsigned int len;