Index: runtime/bin/file_win.cc |
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc |
index db3aef81d2237192dd39c8795b1fdc9ba29ece35..8d45a177dec65a4935ba03d95d451d29f2cd6868 100644 |
--- a/runtime/bin/file_win.cc |
+++ b/runtime/bin/file_win.cc |
@@ -138,9 +138,15 @@ bool File::Lock(File::LockType lock, int64_t start, int64_t end) { |
rc = UnlockFileEx(handle, 0, length_low, length_high, &overlapped); |
break; |
case File::kLockShared: |
- case File::kLockExclusive: { |
- DWORD flags = LOCKFILE_FAIL_IMMEDIATELY; |
- if (lock == File::kLockExclusive) { |
+ case File::kLockExclusive: |
+ case File::kLockBlockingShared: |
+ case File::kLockBlockingExclusive: { |
+ DWORD flags = 0; |
+ if ((lock == File::kLockShared) || (lock == File::kLockExclusive)) { |
+ flags |= LOCKFILE_FAIL_IMMEDIATELY; |
+ } |
+ if ((lock == File::kLockExclusive) || |
+ (lock == File::kLockBlockingExclusive)) { |
flags |= LOCKFILE_EXCLUSIVE_LOCK; |
} |
rc = LockFileEx(handle, flags, 0, |