From: Keith Packard Date: Wed, 5 May 2010 07:44:42 +0000 (-0700) Subject: Disable interrupts while reading from stdin X-Git-Tag: debian/0.6+184+gf7ff327~1 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=f7ff3278bb670df59d7425a014cfe8e3718fea3f Disable interrupts while reading from stdin With multiple input source support, there is a lag between asking a device if it has data and then waiting for more data to appear. If an interrupt signalling additional input arrives in this interval, we'll go to sleep with input available. This patch uses a big hammer by just disabling interrupts for the whole process. Signed-off-by: Keith Packard --- diff --git a/src/ao_stdio.c b/src/ao_stdio.c index 8add30b8..045dff09 100644 --- a/src/ao_stdio.c +++ b/src/ao_stdio.c @@ -50,6 +50,7 @@ getchar(void) __reentrant char c; int8_t stdio = ao_cur_stdio; + EA = 0; for (;;) { c = stdios[stdio].pollchar(); if (c != AO_READ_AGAIN) @@ -59,6 +60,7 @@ getchar(void) __reentrant if (stdio == ao_cur_stdio) ao_sleep(&ao_stdin_ready); } + EA = 1; ao_cur_stdio = stdio; return c; }