http://bugs.winehq.org/show_bug.cgi?id=10317
Summary: After CreateNamedPipe and ReadFile, CancelIO returns false. Product: Wine Version: 0.9.47. Platform: PC OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: wine-kernel AssignedTo: wine-bugs@winehq.org ReportedBy: skiy@actionpos.co.za
Created an attachment (id=8972) --> (http://bugs.winehq.org/attachment.cgi?id=8972) Test case output, source code
Call CreateNamedPipe with FILE_FLAG_OVERLAPPED and PIPE_ACCESS_INBOUND, then do a ReadFile after someone has connected (in this case, just a CreateFile in the same thread). Now this read would normally return fine, if we just waited for the data to appear, however, if for whatever reason we have to stop waiting, i.e. using a CancelIO call, then the CancelIO returns false on Wine. It returns true on Windows. The problem is not with CancelIO, but rather with NtCancelIoFile, as the attached test case will show. (NtCancelIoFile should return 0 on Wine -- as it does on Windows -- instead it returns 192, which confuses the CancelIO and makes it return false.) Please do not patch CancelIO to just map the 192 to a true, this is not right! The problem is with NtCancelIoFile (or somewhere within it).