linux/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 [PATCH] getting rid of all casts of k[cmz]alloc() calls 2006-12-13 09:05:58 -08:00
isdn_audio.h [PATCH] drivers/isdn/i4l/: possible cleanups 2005-06-25 16:24:56 -07:00
isdn_bsdcomp.c [ISDN]: Get rid of some pointless allocation casts in common and bsd comp. 2007-08-26 18:35:46 -07:00
isdn_common.c I4L: fix isdn_ioctl memory overrun vulnerability 2007-12-03 08:13:17 -08:00
isdn_common.h [PATCH] TTY layer buffering revamp 2006-01-10 08:01:59 -08:00
isdn_concap.c [PATCH] drivers/isdn/i4l/: possible cleanups 2005-06-25 16:24:56 -07:00
isdn_concap.h [PATCH] drivers/isdn/i4l/: possible cleanups 2005-06-25 16:24:56 -07:00
isdn_net.c isdn: avoid copying overly-long strings 2007-11-26 19:08:18 -08:00
isdn_net.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
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 Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
isdn_tty.c [ISDN] i4l: 'NO CARRIER' message lost after ldisc flush 2008-01-04 03:55:40 -08:00
isdn_tty.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
isdn_ttyfax.c [PATCH] drivers/isdn/i4l/: possible cleanups 2005-06-25 16:24:56 -07:00
isdn_ttyfax.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
isdn_v110.c [PATCH] isdn: replace kmalloc+memset with kzalloc 2006-12-08 08:29:01 -08:00
isdn_v110.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
isdn_x25iface.c [PATCH] SKB leak in drivers/isdn/i4l/isdn_x25iface.c 2006-06-29 10:26:21 -07:00
isdn_x25iface.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
Kconfig Use menuconfig objects - CONFIG_ISDN_I4L 2007-07-21 17:49:17 -07:00
Makefile Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00