diff -aur -x .[a-zA-Z]* -x *.o -x *~ -x *.s -x *vmlinux* -x *.a -x i386/boot/* test12_orig/drivers/char/tty_io.c test12_bryder/drivers/char/tty_io.c --- test12_orig/drivers/char/tty_io.c Mon Dec 11 05:44:52 2000 +++ test12_bryder/drivers/char/tty_io.c Wed Dec 13 10:05:18 2000 @@ -1650,8 +1650,11 @@ set_current_state(TASK_INTERRUPTIBLE); tty->driver.break_ctl(tty, -1); - if (!signal_pending(current)) - schedule_timeout(duration); + if (!signal_pending(current)) { + /* schedule_timeout is expected to act like this */ + /* expire = timeout + jiffies ; stuff ; return (expire - jiffies) */ + while ( (duration = schedule_timeout(duration)) > 0) { } + } tty->driver.break_ctl(tty, 0); if (signal_pending(current)) return -EINTR;