• M
    [ISDN] i4l: 'NO CARRIER' message lost after ldisc flush · 00409bb0
    Matthias Goebl 提交于
    The ISDN tty layer doesn't produce a 'NO CARRIER' message after hangup.
    
    I suppose it broke when tty_buffer_flush() has been added to
    tty_ldisc_flush() in the commit below.
    
    For isdn_tty_modem_result(RESULT_NO_CARRIER..) the
    message inserted via isdn_tty_at_cout() -> tty_insert_flip_char()
    is flushed immediately by tty_ldisc_flush() -> tty_buffer_flush().
    More annoyingly, the audio abort sequence DLE-ETX is also lost.
    
    This patch fixes only active audio connections, because I assume that nobody
    changes the line discipline for audio.
    
    For non-audio connections the problem remains.
    Maybe we can remove the tty_ldisc_flush() in isdn_tty_modem_result()
    at all because it's done at tty_close?
    
    On Mon, May 07, 2007 at 04:05:57PM -0500, Paul Fulghum wrote:
    > Flush the tty flip buffer when the line discipline
    > input queue is flushed, including the user call
    > tcflush(TCIFLUSH/TCIOFLUSH). This prevents unexpected
    > stale data after a user application calls tcflush().
    >
    > Cc: Alan Cox <alan@lxorguk.org.uk>
    > Cc: Antonino Ingargiola <tritemio@gmail.com>
    > Signed-off-by: Paul Fulghum <paulkf@microgate.com>
    >
    > --- a/drivers/char/tty_io.c	2007-05-04 05:46:55.000000000 -0500
    > +++ b/drivers/char/tty_io.c	2007-05-05 03:23:46.000000000 -0500
    > @@ -1240,6 +1263,7 @@ void tty_ldisc_flush(struct tty_struct *
    >  			ld->flush_buffer(tty);
    >  		tty_ldisc_deref(ld);
    >  	}
    > +	tty_buffer_flush(tty);
    [..]
    Signed-off-by: NMatthias Goebl <matthias.goebl@goebl.net>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    00409bb0
isdn_tty.c 94.7 KB