[RFC]: Overlapped I/O implementation

Alexandre Julliard julliard at winehq.com
Mon Nov 12 15:28:18 CST 2001

Martin Wilck <Martin.Wilck at fujitsu-siemens.com> writes:

> B) The check_async() function in synchro.c operates on file descriptors
>    rather than async requests. Once an overlapped I/O request is
>    issued by the application, it is queued either in the readers or
>    writers list of the async object (which is obtained from the server).
>    If both the readers and writers lists were NULL beforehand, the fd
>    is inserted into the list for check_async to work on.

But the list has to be stored in the server, otherwise you cannot
guarantee the request order across processes. I think you need to put
just about everything except the actual read/write call in the

>    check_async() activates the first element(s) of both the readers and
>    writers lists (where activate means that the actual read/write call
>    is triggered). For FIFOS, only one element would be activated; for
>    regular files several requests up to a given limit (e.g. 4).
>    If the file is on a device where normal I/O would be blocking, a
>    new thread is created for each activated request to satisfy it.

I don't think we want to use threads at all. This has major overhead
and compatibility problems. IMO normal file I/O should always be done
synchronously; it may impact performance a bit when reading from
floppy, but this is better than slowing down all async operations with
the need to manage threads and locks.

Alexandre Julliard
julliard at winehq.com

More information about the wine-devel mailing list