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;hp=aa9ff021d683764a43800eaa18ea0c9be5134939 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; }