Kouhei Sutou
null+****@clear*****
Wed Jul 15 22:34:56 JST 2015
Kouhei Sutou 2015-07-15 22:34:56 +0900 (Wed, 15 Jul 2015) New Revision: 040e75b344d4b263b7f0c3d967803195b49ca6dc https://github.com/groonga/groonga/commit/040e75b344d4b263b7f0c3d967803195b49ca6dc Message: windows: use FILE_SHARE_DELETE to allow delete file that is opened by other process Modified files: lib/dat/file-impl.cpp lib/io.c Modified: lib/dat/file-impl.cpp (+2 -2) =================================================================== --- lib/dat/file-impl.cpp 2015-07-15 22:04:46 +0900 (7a9879a) +++ lib/dat/file-impl.cpp 2015-07-15 22:34:56 +0900 (128556d) @@ -135,7 +135,7 @@ void FileImpl::flush() { void FileImpl::create_(const char *path, UInt64 size) { if ((path != NULL) && (path[0] != '\0')) { file_ = ::CreateFileA(path, GRN_IO_FILE_CREATE_MODE, - FILE_SHARE_READ | FILE_SHARE_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); GRN_DAT_THROW_IF(IO_ERROR, file_ == INVALID_HANDLE_VALUE); @@ -178,7 +178,7 @@ void FileImpl::open_(const char *path) { static_cast<UInt64>(st.st_size) > std::numeric_limits< ::size_t>::max()); file_ = ::CreateFileA(path, GRN_IO_FILE_CREATE_MODE, - FILE_SHARE_READ | FILE_SHARE_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); GRN_DAT_THROW_IF(IO_ERROR, file_ == NULL); Modified: lib/io.c (+6 -3) =================================================================== --- lib/io.c 2015-07-15 22:04:46 +0900 (3cee03f) +++ lib/io.c 2015-07-15 22:34:56 +0900 (f5b0785) @@ -1576,7 +1576,8 @@ grn_fileinfo_open_common(grn_ctx *ctx, fileinfo *fi, const char *path, int flags flags_description = "O_RDWR|O_CREAT"; } fi->fh = CreateFile(path, GRN_IO_FILE_CREATE_MODE, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, dwCreationDisposition, FILE_ATTRIBUTE_NORMAL, 0); if (fi->fh == INVALID_HANDLE_VALUE) { SERR("CreateFile"); @@ -1591,7 +1592,8 @@ grn_fileinfo_open_common(grn_ctx *ctx, fileinfo *fi, const char *path, int flags CloseHandle(fi->fh); /* unable to assign OPEN_ALWAYS and TRUNCATE_EXISTING at once */ fi->fh = CreateFile(path, GRN_IO_FILE_CREATE_MODE, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (fi->fh == INVALID_HANDLE_VALUE) { SERR("CreateFile"); @@ -1604,7 +1606,8 @@ grn_fileinfo_open_common(grn_ctx *ctx, fileinfo *fi, const char *path, int flags } /* O_RDWR only */ fi->fh = CreateFile(path, GRN_IO_FILE_CREATE_MODE, - FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (fi->fh == INVALID_HANDLE_VALUE) { SERR("CreateFile"); -------------- next part -------------- HTML����������������������������...下载