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