input: give up on the input stream only after millions of errors

This mitigates a problem seen sometimes among the Red Hat crash reports:
somehow wgetch() keeps returning ERR, as if it were in nodelay mode.
(I've seen this happen once after nano came out of suspension.)

Using a much larger error-count value gives the user a few seconds
to type something and hopefully get out of the error condition.
This commit is contained in:
Benno Schulenberg 2021-06-29 13:20:16 +02:00
parent fc01c5a10e
commit 8d1a666dcf

View File

@ -233,11 +233,11 @@ void read_keys_from(WINDOW *win)
}
}
#endif
/* When we've failed to get a keycode over a hundred times in a row,
/* When we've failed to get a keycode millions of times in a row,
* assume our input source is gone and die gracefully. We could
* check if errno is set to EIO ("Input/output error") and die in
* that case, but it's not always set properly. Argh. */
if (input == ERR && ++errcount == 123)
if (input == ERR && ++errcount == 12345678)
die(_("Too many errors from stdin\n"));
}