On 2020-03-17 13:16, Corinna Vinschen wrote:
Hi Åke,
On Mar 16 10:35, Corinna Vinschen wrote:
On Mar 14 11:36, Åke Rehnman via Cygwin wrote:
On 2020-03-14 11:23, Åke Rehnman wrote:
BTW there is a gremlin in the "else if (ev)" line....
A gremlin? Would you mind to explain? Btw., if you find a bug
in the code, we do take patches :) https://cygwin.com/contrib.html
If we have an error event in ev it will make a blocking read even if
VTIME==0.
Ah, yeah, I was aware of that, I just ignored it for now since I'm not
sure what the best way to handle that is.
Two options come to mind, either ignoring these errors entirely, or
returning -1 with errno set to EIO, along the lines of the Linux test
for tty_io_error() at the start of tty_read.
However, I have a sinking feeling that the function needs a rewrite
anyway.
For instance, consider reading in blocking mode, which may result in
running the for loop more than once. If the first loop successfully
read 4 bytes, and the second loop runs into an error from
ClearCommError, the function will return -1 with errno set, completely
ignoring the fact that 4 bytes have been read already.
It should return 4 in this case, and only the next run of
fhandler_serial::raw_read *might* return -1.
This code really shows its age...
I have revamped the fhandler_serial::raw_read function, but I need
somebody for testing. Any chance you volunteer for that job?
We may need a couple of days to iron out all problems, but I think
the code is more sound now than the original function. I even
added a couple of comments to the code (*gasp*) so there's stuff
to discuss and to see why I did it that way.
For a quicker turn around we can also use Freenode IRC, see
https://cygwin.com/irc.html
Interested?
Sure, bring it on!
/Ake
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple