On Tue, May 17, 2022 at 01:55:07PM -0400, Sean Anderson wrote:

> ARM semihosting provides no provisions for determining if there is
> pending input. The only way to determine if there is console input is to
> do a read (and block until the user types something). For this reason,
> we always return true for tstc (since you will always get input if you
> try). However, this behavior can cause problems for code which expects
> tstc to eventually be empty. In query_console_serial, there is the
> following construct:
> 
>       /* empty input buffer */
>       while (tstc())
>               getchar();
> 
> with the current implementation, this effectively turns into an infinite
> loop. To avoid this, fake tstc by returning false half of the time. This
> is generally OK because the other common construct looks like
> 
>       do {
>               if (tstc())
>                       process(getchar());
>       } while (!timeout());
> 
> so it's fine if we only read a new character every other loop. This will
> break things like CYGACC_COMM_IF_GETC_TIMEOUT, but that could be
> reworked to test on the timeout instead of calling tstc again (and
> ymodem over semihosted serial is not that useful in the first place).
> 
> Signed-off-by: Sean Anderson <sean.ander...@seco.com>

Applied to u-boot/next, thanks!

-- 
Tom

Attachment: signature.asc
Description: PGP signature

Reply via email to