[Groonga-commit] groonga/groonga at 040e75b [master] windows: use FILE_SHARE_DELETE to allow delete file that is opened by other process

アーカイブの一覧に戻る

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����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る