Commit 7e94b1d9 authored by Joe Peterson's avatar Joe Peterson Committed by Linus Torvalds

n_tty: Output bells immediately on a full buffer

This patch causes "bell" (^G) characters (invoked when the input buffer
is full) to be immediately output rather than filling the echo buffer.

This is especially a problem when the tty is stopped and buffers fill, since
the bells do not serve their purpose of immediate notification that the
buffer cannot take further input, and they will flush all at once when the
tty is restarted.
Signed-off-by: default avatarJoe Peterson <joe@skyrush.com>
Signed-off-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent acc71bba
...@@ -872,7 +872,7 @@ static void eraser(unsigned char c, struct tty_struct *tty) ...@@ -872,7 +872,7 @@ static void eraser(unsigned char c, struct tty_struct *tty)
/* FIXME: locking needed ? */ /* FIXME: locking needed ? */
if (tty->read_head == tty->canon_head) { if (tty->read_head == tty->canon_head) {
/* echo_char_raw('\a', tty); */ /* what do you think? */ /* process_output('\a', tty); */ /* what do you think? */
return; return;
} }
if (c == ERASE_CHAR(tty)) if (c == ERASE_CHAR(tty))
...@@ -1148,10 +1148,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c) ...@@ -1148,10 +1148,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0; parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0;
if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk - 1)) { if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk - 1)) {
/* beep if no space */ /* beep if no space */
if (L_ECHO(tty)) { if (L_ECHO(tty))
echo_char_raw('\a', tty); process_output('\a', tty);
process_echoes(tty);
}
return; return;
} }
if (L_ECHO(tty)) { if (L_ECHO(tty)) {
...@@ -1255,10 +1253,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c) ...@@ -1255,10 +1253,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
} }
if (c == '\n') { if (c == '\n') {
if (tty->read_cnt >= N_TTY_BUF_SIZE) { if (tty->read_cnt >= N_TTY_BUF_SIZE) {
if (L_ECHO(tty)) { if (L_ECHO(tty))
echo_char_raw('\a', tty); process_output('\a', tty);
process_echoes(tty);
}
return; return;
} }
if (L_ECHO(tty) || L_ECHONL(tty)) { if (L_ECHO(tty) || L_ECHONL(tty)) {
...@@ -1280,10 +1276,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c) ...@@ -1280,10 +1276,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty))
? 1 : 0; ? 1 : 0;
if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk)) { if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk)) {
if (L_ECHO(tty)) { if (L_ECHO(tty))
echo_char_raw('\a', tty); process_output('\a', tty);
process_echoes(tty);
}
return; return;
} }
/* /*
...@@ -1320,10 +1314,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c) ...@@ -1320,10 +1314,8 @@ static inline void n_tty_receive_char(struct tty_struct *tty, unsigned char c)
parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0; parmrk = (c == (unsigned char) '\377' && I_PARMRK(tty)) ? 1 : 0;
if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk - 1)) { if (tty->read_cnt >= (N_TTY_BUF_SIZE - parmrk - 1)) {
/* beep if no space */ /* beep if no space */
if (L_ECHO(tty)) { if (L_ECHO(tty))
echo_char_raw('\a', tty); process_output('\a', tty);
process_echoes(tty);
}
return; return;
} }
if (L_ECHO(tty)) { if (L_ECHO(tty)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment