Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: read_poll Re: PATCH: Zpty cleanup (merge 13061 with 13116)
- X-seq: zsh-workers 13140
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: PATCH: read_poll Re: PATCH: Zpty cleanup (merge 13061 with 13116)
- Date: Wed, 8 Nov 2000 15:58:13 +0000
- In-reply-to: <200011081020.LAA20686@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- In-reply-to: <001a01c04970$948d58f0$21c9ca95@xxxxxxxxxxxxxx>
- In-reply-to: <001c01c0498c$a152ef70$21c9ca95@xxxxxxxxxxxxxx>
- In-reply-to: <000101c04992$a0657370$21c9ca95@xxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
- References: <200011081020.LAA20686@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> <001a01c04970$948d58f0$21c9ca95@xxxxxxxxxxxxxx> <001c01c0498c$a152ef70$21c9ca95@xxxxxxxxxxxxxx> <000101c04992$a0657370$21c9ca95@xxxxxxxxxxxxxx>
On Nov 8, 11:20am, Sven Wischnowsky wrote:
}
} Bart Schaefer wrote:
}
} > However, that does not mean that the rest of the tests should be skipped
} > when select() returns 0. A return of 0 means the select() timed out,
} > which (apparently) might happen under Cygwin even if there actually are
} > characters available to be read. Peter/Andrej, is that the case?
}
} I don't know about Cygwin, but that blocking read (line 1381) is
} exactly the test I wanted to avoid.
The read on line 1381 is *non-*blocking. Since polltty is now always zero
when called from zpty, the setblock_fd() call is made before the read() is
attempted. That was the patch I first committed which started me down the
road of merging in your changes.
On Nov 8, 1:42pm, Andrej Borsenkow wrote:
} Subject: RE: PATCH: Zpty cleanup (merge 13061 with 13116)
}
} I had not much time recently. Casual test shows, that zpty is currently
} completely broken on current Cygwin (1.1.5-4 as of this writing); I do not
} claim that it is zsh problem, but recent changes may have made it worse.
More on this in the other zpty thread ...
} About select - so far there seems to be no known problems under cygwin
} (that does not mean, there are no problems).
OK, if there are no known problems with select, then the test on line
1376 can change from `ret <= 0' to `ret < 0' -- and in that case it's
possible that we could split read_poll() into two cases, HAVE_SELECT v.
all the other code that's there. I won't do that for now, though.
This still doesn't address my complaint that select() on my linux box
returns "ready for reading" when in fact the result of read() will be
an I/O error. That makes no difference to `read -t' (for which the
read_poll() code was originally written) but it screws up the return
value of `zpty -r'.
On Nov 8, 5:03pm, Andrej Borsenkow wrote:
} Subject: read_poll RE: PATCH: Zpty cleanup (merge 13061 with 13116)
}
} read_poll tries to read from fd and stores the character it has read in
} readchar; that is cmd->read when called from checkptycmd. But this value does
} not seem to be used anywhere in read loop that looks like read_poll simply
} eats up this readahead char ...
You're correct. The code Sven referenced at line 474 needs to be repeated
after line 484.
Index: Src/utils.c
===================================================================
@@ -1373,7 +1373,7 @@
#endif
#endif
- if (ret <= 0) {
+ if (ret < 0) {
/*
* Final attempt: set non-blocking read and try to read a character.
* Praise Bill, this works under Cygwin (nothing else seems to).
Index: Src/Modules/zpty.c
===================================================================
@@ -482,6 +482,11 @@
checkptycmd(cmd);
if (cmd->fin)
break;
+ if (cmd->read != -1) {
+ buf[++used] = (char) cmd->read;
+ seen = 1;
+ cmd->read = -1;
+ }
}
if ((ret = read(cmd->fd, buf + used, 1)) == 1) {
seen = 1;
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
Messages sorted by:
Reverse Date,
Date,
Thread,
Author