I have two processes with the same tty open, one opens blocking and
one opens nonblocking.

If the blocking process blocks doing a write (due to flow control,
just going to fast, etc...) the nonblocking process will also block
when it writes until the blocking process unblocks.

This seems to occur because do_tty_write() isn't checking for
O_NONBLOCK when taking the tty's write mutex.


Signed-off-by: Dave Johnson <[EMAIL PROTECTED]>

===== drivers/char/tty_io.c 1.237 vs edited =====
--- 1.237/drivers/char/tty_io.c 2007-03-18 16:40:06 -04:00
+++ edited/drivers/char/tty_io.c        2007-05-01 10:53:27 -04:00
@@ -1690,9 +1690,13 @@
        ssize_t ret = 0, written = 0;
        unsigned int chunk;
        
-       /* FIXME: O_NDELAY ... */
-       if (mutex_lock_interruptible(&tty->atomic_write_lock)) {
-               return -ERESTARTSYS;
+       if (file->f_flags & O_NONBLOCK) {
+               if (!mutex_trylock(&tty->atomic_write_lock))
+                       return -EAGAIN;
+       }
+       else {
+               if (mutex_lock_interruptible(&tty->atomic_write_lock))
+                       return -ERESTARTSYS;
        }
 
        /*

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to