This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Initialize IO_STATUS_BLOCK for pread, pwrite


Just closing out this email thread...

On Fri, 1 Dec 2017, Mark Geisert wrote:
On Fri, 1 Dec 2017, Corinna Vinschen wrote:
On Dec  1 10:30, Corinna Vinschen wrote:
On Dec  1 00:44, Mark Geisert wrote:
And then pwrite() creates its own handle (or reuses one (!)) to avoid
messing up the seek pointer of the fd passed in.

Wait.  Not "re-use", but "re-open".  If you're more familiar with POSIX
terms, this is along the lines of the fdopen(3) call, just on the NT
API level.  There's an equivalent Win32 function since Windows 2003
called ReOpenFile.

In terms of pread/pwrite, the new handle shares the same settings with
the original handle.  However, if you use cygwin_attach_handle_to_fd,
there's a chance information got lost.  Nobody actually uses this call ;)

In terms of FILE_SYNCHRONOUS_IO_NONALERT, this is stored in
fhandler_base::options, utilizing the get_options/set_options methods.
I have a hunch that cygwin_attach_handle_to_fd fails to call set_options,
thus options is 0 when you call pwrite, thus the new handle is opened
without FILE_SYNCHRONOUS_IO_NONALERT and all the other option flags
we use by default.

It's more than a hunch.  Of course the info gets lost since
none of the functions called by cygwin_attach_handle_to_fd calls
NtQueryInformationFile(FileModeInformation) to fetch the options.

Bang. There it is. Let me fix the offending program to just use Cygwin-supplied handles and make sure this bug of mine is squashed. I'll report back but it might be a few days.

Yes, this bug of mine that I was blaming pwrite() internals for, doesn't occur when using Cygwin-supplied file descriptors with Cygwin i/o calls. Who new?

Sorry for the noise, but at least what I learned from this discussion is very helpful in figuring out what makes sense for a future async i/o facility in Cygwin.

I have some further comments but I'll take them to cygwin-developers.
This IO_STATUS_BLOCK patch is withdrawn ;-) .

..mark


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]