diff options
author | Jeff Dike <jdike@addtoit.com> | 2005-05-05 19:15:32 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-05 19:36:36 -0400 |
commit | cd2ee4a30cc0775d8b54e5b958613361a7cacfec (patch) | |
tree | edea72ea7d723a1c35675632850916d77084581b /arch/um/kernel/skas | |
parent | c578455a3eccf4dd7bd111e77129c301d6d67914 (diff) |
[PATCH] uml: Fix SIGWINCH relaying
This makes SIGWINCH work again, and fixes a couple of SIGWINCH-associated
crashes. First, the sigio thread disables SIGWINCH because all hell breaks
loose if it ever gets one and tries to call the signal handling code. Second,
there was a problem with deferencing tty structs after they were freed. The
SIGWINCH support for a tty wasn't being turned off or freed after the tty went
away.
Signed-off-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um/kernel/skas')
-rw-r--r-- | arch/um/kernel/skas/process.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/um/kernel/skas/process.c b/arch/um/kernel/skas/process.c index c0b30515dfb6..4dc13bc8cfd8 100644 --- a/arch/um/kernel/skas/process.c +++ b/arch/um/kernel/skas/process.c | |||
@@ -28,10 +28,11 @@ | |||
28 | #include "chan_user.h" | 28 | #include "chan_user.h" |
29 | #include "signal_user.h" | 29 | #include "signal_user.h" |
30 | #include "registers.h" | 30 | #include "registers.h" |
31 | #include "process.h" | ||
31 | 32 | ||
32 | int is_skas_winch(int pid, int fd, void *data) | 33 | int is_skas_winch(int pid, int fd, void *data) |
33 | { | 34 | { |
34 | if(pid != os_getpid()) | 35 | if(pid != os_getpgrp()) |
35 | return(0); | 36 | return(0); |
36 | 37 | ||
37 | register_winch_irq(-1, fd, -1, data); | 38 | register_winch_irq(-1, fd, -1, data); |
@@ -259,6 +260,10 @@ int start_idle_thread(void *stack, void *switch_buf_ptr, void **fork_buf_ptr) | |||
259 | sigjmp_buf **switch_buf = switch_buf_ptr; | 260 | sigjmp_buf **switch_buf = switch_buf_ptr; |
260 | int n; | 261 | int n; |
261 | 262 | ||
263 | set_handler(SIGWINCH, (__sighandler_t) sig_handler, | ||
264 | SA_ONSTACK | SA_RESTART, SIGUSR1, SIGIO, SIGALRM, | ||
265 | SIGVTALRM, -1); | ||
266 | |||
262 | *fork_buf_ptr = &initial_jmpbuf; | 267 | *fork_buf_ptr = &initial_jmpbuf; |
263 | n = sigsetjmp(initial_jmpbuf, 1); | 268 | n = sigsetjmp(initial_jmpbuf, 1); |
264 | if(n == 0) | 269 | if(n == 0) |