server: Add support for pending write flag to the serial device. Take 2.
Wolfgang Walter
wine at stwm.de
Thu Oct 24 06:53:40 CDT 2013
Am Donnerstag, 24. Oktober 2013, 11:29:34 schrieb Dmitry Timoshkov:
> Wolfgang Walter <wine at stwm.de> wrote:
> > > > I have no intention to discuss that all again. Please think about the
> > > > problem. Hint: writing twice as many bytes with 150 baud needs more
> > > > time,
> > > > significantly more time then TIMEOUT.
> > >
> > > Not really. Francois sent an investigation with pretty exhaustive
> > > explanation of the behvaiour of COM-port UARTs regarding timings and
> > > baud
> > > rates.
> >
> > Have you read it? It says that with a standard UART windows may signals
> > after 872ms that the tx queue is empty (though there are still 4 bytes to
> > send) when you write 17 bytes. For 34 bytes he gets 1802ms > TIMEOUT.
>
> Where do you see 34 bytes to be written in that test?
Sorry for that. I looked at the 1.7.2 codebase. There was
SetLastError(0xdeadbeef);
res = WriteFile(hcom, tbuf, sizeof(tbuf), &bytes, NULL);
todo_wine
ok(!res, "WriteFile on an overlapped handle without ovl structure should
fail\n");
todo_wine
ok(GetLastError() == ERROR_INVALID_PARAMETER, "expected
ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
In 1.7.4 there are no todo_wine's any more so this does not fail any more and
there should be no pending bytes from that test. There should only be 17 bytes
in the test in question.
>
> > And I really don't think that we can expect exactly that same behaviour
> > when using the linux serial driver, anyway.
>
> At the time I was reworking the EV_TXEMPTY to use overlapped IO the
> reasoning for using 900 ms as the designed time was simple: that was enough
> to make the test pass under Windows with real hardware. How the patch we
> are discussing makes the test pass for me under Linux with a USB-serial
> adapter, which confirms that there is no reasons that it can't work under
> Linux as well.
>
> I understand that there are cases of (really old) hardware where this limit
> may not be enough, and Francois has already sent a patch which increases
> timeout. The Francois' patch hasn't been accepted, but that's a different
> matter.
I built 1.7.4 here and I still get a timeout on my machine (with onboard
device), though. The board has an Intel "Corporation 6 Series/C200 Series
Chipset Family". I mesured the time needed to write with 150 baud on linux and
it needs about 1000ms till ioctl(fd, TIOCOUTQ, &out) returns with zero.
Sometimes up to 1100ms. When I mesure it I do not use select() or poll() but
loop similar as wine does: call ioctl(), sleep for 1ms, ...
Regards,
--
Wolfgang Walter
Studentenwerk München
Anstalt des öffentlichen Rechts
More information about the wine-devel
mailing list