diff -Naur -X exclude-files ac_cur/arch/um/drivers/stdio_console.c ac/arch/um/drivers/stdio_console.c --- ac_cur/arch/um/drivers/stdio_console.c Tue Oct 30 18:27:12 2001 +++ ac/arch/um/drivers/stdio_console.c Fri Nov 2 23:32:06 2001 @@ -56,22 +56,31 @@ SA_INTERRUPT | SA_SHIRQ, "console", data)); } -static int open_console(int line, struct tty_struct *tty) +static int open_console_nocount(int line) { int err; - down(&stdio_sem); err = open_chan_pair(&vts[line].chan, setup_console_irq, &vts[line]); if(err < 0){ printk("Failed to open virtual console %d, errno = %d\n", line, err); - up(&stdio_sem); return(err); } + return(0); +} + +static int open_console(int line, struct tty_struct *tty) +{ + int err; + + down(&stdio_sem); + err = open_console_nocount(line); + if(err) goto out; vts[line].count++; vts[line].tty = tty; + out: up(&stdio_sem); - return(0); + return(-err); } static int con_open(struct tty_struct * tty, struct file * filp) @@ -91,6 +100,7 @@ line = MINOR(tty->device) - tty->driver.minor_start; vts[line].count--; + if(vts[line].count == 0) vts[line].tty = NULL; } static int con_write(struct tty_struct * tty, int from_user, @@ -179,7 +189,10 @@ for(i=0;i