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


On Dec  1 10:30, Corinna Vinschen wrote:
> On Dec  1 00:44, Mark Geisert wrote:
> > [...]
> > I'd better take this info back to "the lab" and do some more digging. Thanks
> > very much for these details and your earlier replies.  When I saw
> > FILE_SYNCHRONOUS_IO_NONALERT in your reply, I remembered that I'm not using
> > a Cygwin-supplied handle but rather a handle returned by Win32 CreateFile().
> > Not only that, but using cygwin_attach_handle_to_fd() to get an fd to work
> > with.
> 
> Ouch.
> 
> > 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.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

Attachment: signature.asc
Description: PGP signature


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