mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-09 22:17:34 +02:00
busy loop on EAGAIN when srfi-18 isn't loaded instead of returning EOF
This commit is contained in:
parent
f60617815d
commit
9510e5b5c2
1 changed files with 10 additions and 9 deletions
19
vm.c
19
vm.c
|
@ -1922,10 +1922,10 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) {
|
||||||
if (i == EOF) {
|
if (i == EOF) {
|
||||||
#if SEXP_USE_GREEN_THREADS
|
#if SEXP_USE_GREEN_THREADS
|
||||||
if ((sexp_port_stream(_ARG2) ? ferror(sexp_port_stream(_ARG2)) : 1)
|
if ((sexp_port_stream(_ARG2) ? ferror(sexp_port_stream(_ARG2)) : 1)
|
||||||
&& (errno == EAGAIN)
|
&& (errno == EAGAIN)) {
|
||||||
&& sexp_applicablep(sexp_global(ctx, SEXP_G_THREADS_BLOCKER))) {
|
|
||||||
if (sexp_port_stream(_ARG1)) clearerr(sexp_port_stream(_ARG2));
|
if (sexp_port_stream(_ARG1)) clearerr(sexp_port_stream(_ARG2));
|
||||||
sexp_apply1(ctx, sexp_global(ctx, SEXP_G_THREADS_BLOCKER), _ARG2);
|
if (sexp_applicablep(sexp_global(ctx, SEXP_G_THREADS_BLOCKER)))
|
||||||
|
sexp_apply1(ctx, sexp_global(ctx, SEXP_G_THREADS_BLOCKER), _ARG2);
|
||||||
fuel = 0;
|
fuel = 0;
|
||||||
ip--; /* try again */
|
ip--; /* try again */
|
||||||
goto loop;
|
goto loop;
|
||||||
|
@ -2002,10 +2002,11 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) {
|
||||||
if (i == EOF) {
|
if (i == EOF) {
|
||||||
#if SEXP_USE_GREEN_THREADS
|
#if SEXP_USE_GREEN_THREADS
|
||||||
if ((sexp_port_stream(_ARG1) ? ferror(sexp_port_stream(_ARG1)) : 1)
|
if ((sexp_port_stream(_ARG1) ? ferror(sexp_port_stream(_ARG1)) : 1)
|
||||||
&& (errno == EAGAIN)
|
&& (errno == EAGAIN)) {
|
||||||
&& sexp_applicablep(sexp_global(ctx, SEXP_G_THREADS_BLOCKER))) {
|
|
||||||
if (sexp_port_stream(_ARG1)) clearerr(sexp_port_stream(_ARG1));
|
if (sexp_port_stream(_ARG1)) clearerr(sexp_port_stream(_ARG1));
|
||||||
sexp_apply1(ctx, sexp_global(ctx, SEXP_G_THREADS_BLOCKER), _ARG1);
|
/* TODO: block and unblock */
|
||||||
|
if (sexp_applicablep(sexp_global(ctx, SEXP_G_THREADS_BLOCKER)))
|
||||||
|
sexp_apply1(ctx, sexp_global(ctx, SEXP_G_THREADS_BLOCKER), _ARG1);
|
||||||
fuel = 0;
|
fuel = 0;
|
||||||
ip--; /* try again */
|
ip--; /* try again */
|
||||||
} else
|
} else
|
||||||
|
@ -2027,10 +2028,10 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) {
|
||||||
if (i == EOF) {
|
if (i == EOF) {
|
||||||
#if SEXP_USE_GREEN_THREADS
|
#if SEXP_USE_GREEN_THREADS
|
||||||
if ((sexp_port_stream(_ARG1) ? ferror(sexp_port_stream(_ARG1)) : 1)
|
if ((sexp_port_stream(_ARG1) ? ferror(sexp_port_stream(_ARG1)) : 1)
|
||||||
&& (errno == EAGAIN)
|
&& (errno == EAGAIN)) {
|
||||||
&& sexp_applicablep(sexp_global(ctx, SEXP_G_THREADS_BLOCKER))) {
|
|
||||||
if (sexp_port_stream(_ARG1)) clearerr(sexp_port_stream(_ARG1));
|
if (sexp_port_stream(_ARG1)) clearerr(sexp_port_stream(_ARG1));
|
||||||
sexp_apply1(ctx, sexp_global(ctx, SEXP_G_THREADS_BLOCKER), _ARG1);
|
if (sexp_applicablep(sexp_global(ctx, SEXP_G_THREADS_BLOCKER)))
|
||||||
|
sexp_apply1(ctx, sexp_global(ctx, SEXP_G_THREADS_BLOCKER), _ARG1);
|
||||||
fuel = 0;
|
fuel = 0;
|
||||||
ip--; /* try again */
|
ip--; /* try again */
|
||||||
} else
|
} else
|
||||||
|
|
Loading…
Add table
Reference in a new issue