android_kernel_xiaomi_sm8350/drivers/isdn/i4l
Matthias Goebl 00409bb045 [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>
2008-01-04 03:55:40 -08:00
..
isdn_audio.c
isdn_audio.h
isdn_bsdcomp.c
isdn_common.c I4L: fix isdn_ioctl memory overrun vulnerability 2007-12-03 08:13:17 -08:00
isdn_common.h
isdn_concap.c
isdn_concap.h
isdn_net.c isdn: avoid copying overly-long strings 2007-11-26 19:08:18 -08:00
isdn_net.h
isdn_ppp.c [ISDN]: Remove local copy of device name to make sure renames work. 2007-10-15 12:26:37 -07:00
isdn_ppp.h
isdn_tty.c [ISDN] i4l: 'NO CARRIER' message lost after ldisc flush 2008-01-04 03:55:40 -08:00
isdn_tty.h
isdn_ttyfax.c
isdn_ttyfax.h
isdn_v110.c
isdn_v110.h
isdn_x25iface.c
isdn_x25iface.h
Kconfig
Makefile