]> err.no Git - linux-2.6/commit
[ISDN] i4l: 'NO CARRIER' message lost after ldisc flush
authorMatthias Goebl <matthias.goebl@goebl.net>
Fri, 4 Jan 2008 10:19:30 +0000 (02:19 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Jan 2008 11:55:40 +0000 (03:55 -0800)
commit00409bb045887ec5e7b9e351bc080c38ab6bfd33
tree829ec62282d291df72e0e1ab653bc4b5eb2da86e
parent134d99e302618eeb102c2a5be1f9e98696288bdd
[ISDN] i4l: 'NO CARRIER' message lost after ldisc flush

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: Matthias Goebl <matthias.goebl@goebl.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/i4l/isdn_tty.c