not setting errno in sexp_maybe_block_port

This commit is contained in:
Alex Shinn 2011-11-21 20:41:06 +09:00
parent af79b05f6d
commit 17b265e269

19
sexp.c
View file

@ -2087,18 +2087,19 @@ int sexp_maybe_block_port (sexp ctx, sexp in, int forcep) {
if (sexp_port_flags(in) == SEXP_PORT_UNKNOWN_FLAGS) if (sexp_port_flags(in) == SEXP_PORT_UNKNOWN_FLAGS)
sexp_port_flags(in) = fcntl(sexp_port_fileno(in), F_GETFL); sexp_port_flags(in) = fcntl(sexp_port_fileno(in), F_GETFL);
if (sexp_port_flags(in) & O_NONBLOCK) { if (sexp_port_flags(in) & O_NONBLOCK) {
errno = 0;
if (!forcep if (!forcep
&& (((c = sexp_read_char(ctx, in)) == EOF) && (((c = sexp_read_char(ctx, in)) == EOF)
&& (errno == EAGAIN) && sexp_port_stream(in)
&& sexp_opcodep((f=sexp_global(ctx, SEXP_G_THREADS_BLOCKER))))) { && ferror(sexp_port_stream(in)) && (errno == EAGAIN))) {
((sexp_proc2)sexp_opcode_func(f))(ctx, f, 1, in); f = sexp_global(ctx, SEXP_G_THREADS_BLOCKER);
return 1; if (sexp_opcodep(f)) {
} else { ((sexp_proc2)sexp_opcode_func(f))(ctx, f, 1, in);
if (!forcep) sexp_push_char(ctx, c, in); return 1;
sexp_port_blockedp(in) = 1; }
fcntl(sexp_port_fileno(in), F_SETFL, sexp_port_flags(in) & ~O_NONBLOCK);
} }
if (!forcep) sexp_push_char(ctx, c, in);
sexp_port_blockedp(in) = 1;
fcntl(sexp_port_fileno(in), F_SETFL, sexp_port_flags(in) & ~O_NONBLOCK);
} }
} }
return 0; return 0;