Il 21/09/2012 10:33, Kevin Wolf ha scritto:
>> > +    /* could not reopen the file handle, so fall back to opening
>> > +     * new file (CreateFile) */
>> > +    if (raw_s->hfile == INVALID_HANDLE_VALUE) {
>> > +        raw_s->hfile = CreateFile(state->bs->filename, access_flags,
>> > +                                  FILE_SHARE_READ, NULL, OPEN_EXISTING,
>> > +                                  overlapped, NULL);
>> > +        if (raw_s->hfile == INVALID_HANDLE_VALUE) {
>> > +            /* this could happen because the access_flags requested are
>> > +             * incompatible with the existing share mode of s->hfile,
>> > +             * so our only option now is to close s->hfile, and try again.
>> > +             * This could end badly */
>> > +            CloseHandle(s->hfile);
> How common is this case?
> 
> We do have another option, namely not reopen at all and return an error.
> Of course, this only makes sense if it doesn't mean that we almost never
> succeed.

Probably pretty common since we specify FILE_SHARE_READ for the sharing
mode, meaning that "subsequent open operations on a file or device are
only able to request read access".

I would change it to FILE_SHARE_READ|FILE_SHARE_WRITE and remove this code.

Paolo

Reply via email to