diff options
author | Kazutaka YOKOTA <yokota@FreeBSD.org> | 2001-07-24 11:15:20 +0000 |
---|---|---|
committer | Kazutaka YOKOTA <yokota@FreeBSD.org> | 2001-07-24 11:15:20 +0000 |
commit | 16fc634b67ef55f745f6933ddd0c7503fa4e5f45 (patch) | |
tree | 2e95b7e1cb18d2be3e9263e665386e4230e549e9 /lib/libvgl | |
parent | b2b50712a6520c00a117f4609564cffcd33f48ba (diff) | |
download | src-16fc634b67ef55f745f6933ddd0c7503fa4e5f45.tar.gz src-16fc634b67ef55f745f6933ddd0c7503fa4e5f45.zip |
Notes
Diffstat (limited to 'lib/libvgl')
-rw-r--r-- | lib/libvgl/main.c | 17 |
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; |