Serial and pread
Mike McCormack
mike at codeweavers.com
Wed Apr 14 04:01:45 CDT 2004
Hi Izak,
The wineserver may also change the status of the request to
STATUS_SUCCESS after a certain timeout is reached. The problem is most
likely that the timeout is not being calculated properly.
The code to do that is in server/async.c and server/serial.c.
The timeouts are set by the SetCommTimeouts call. Try using the +serial
debug channel to see what timeouts are being set. The parameters to the
ReadFile command may also be important - check whether it is being
called with an overlapped structure or not.
Mike
Izak Burger wrote:
> trace:ntdll:FILE_AsyncReadService 0x42295b4f 0x42295fe1 1
> trace:ntdll:FILE_AsyncReadService read 1 more bytes 9/1040 so far,
> io_status->u.Status=0x103
>
> The tracing of io_status->u.Status was added by myself. I'm not sure if
> the problem is not perhaps caused by the fact that u.Status is always
> 0x103 (STATUS_PENDING) and never becomes 0x0 (STATUS_SUCCESS). Of
> course, if I change the FD_TYPE to FD_TYPE_SOCKET, the result is always
> STATUS_SUCCESS, which is probably what the app wants. Not knowing much
> about the API or how Windows implements it (haven't programmed in the
> windows environment for 7 years now) I'm not even sure if this is some
> kind of a windows quirk exploited by this app.
>
> If my experience with unix in general is anything to go by, then it
> would be acceptable to provide a 1040 byte buffer, and read as much data
> into it as you can (which is almost always less than the 1040 you
> _could_ theoretically read in one go), then return STATUS_SUCCESS. Is
> it the same for windows? Obviously the above code will return
> STATUS_PENDING until it has read 1040 bytes, and only then will it
> return STATUS_SUCCESS.
More information about the wine-devel
mailing list