serial: Fix race for IOCTL_SERIAL_WAIT_ON_MASK

Wolfgang Walter wolfgang.walter at stwm.de
Tue Apr 19 10:00:46 CDT 2011


Am Dienstag, 19. April 2011 schrieb Alexandre Julliard:
> Wolfgang Walter <wolfgang.walter at stwm.de> writes:
> > So this is my theorie:
> >
> > * wait_on() is called.
> >
> > * wait_on() calls RtlQueueWorkItem(wait_for_event, commio, 0 /* FIXME */)
> >   and returns with STATUS_PENDING
> >
> > * wait_for_event() finishes and sets iosb before io_control() continues
> >
> > * io_control sets iosb to STATUS_PENDING
>
> The last one is a bug. iosb should only be set once we have a
> result. Check how the other async I/O functions do it.

It is done similar elsewhere when getting asynchron, i.e.

in dlls/ws2_32/socket.c: WS2_ConnectEx():

or dlls/kernel32/file.c: WriteFile()

* set iosb to STATUS_PENDING,
* call function
* if it returns with STATUS_PENDING don't touch iosb.


Regards,
-- 
Wolfgang Walter
Studentenwerk München
Anstalt des öffentlichen Rechts




More information about the wine-devel mailing list