mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-09 01:44:13 +08:00
mdbx: windows - fix truncation race while unmap.
Change-Id: I93983d100c78aa3e57c5a7ebd9d5bf2a96081ed7
This commit is contained in:
parent
b6e605b8da
commit
f314cd6b92
@ -2041,6 +2041,11 @@ static int mdbx_mapresize(MDBX_env *env, const pgno_t size_pgno,
|
|||||||
|
|
||||||
bailout:
|
bailout:
|
||||||
if (rc == MDBX_SUCCESS) {
|
if (rc == MDBX_SUCCESS) {
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
|
assert(size_bytes == env->me_dxb_mmap.current);
|
||||||
|
assert(size_bytes <= env->me_dxb_mmap.filesize);
|
||||||
|
assert(limit_bytes == env->me_dxb_mmap.length);
|
||||||
|
#endif
|
||||||
env->me_dbgeo.now = size_bytes;
|
env->me_dbgeo.now = size_bytes;
|
||||||
env->me_dbgeo.upper = limit_bytes;
|
env->me_dbgeo.upper = limit_bytes;
|
||||||
if (env->me_txn) {
|
if (env->me_txn) {
|
||||||
|
12
src/osal.c
12
src/osal.c
@ -892,11 +892,6 @@ int mdbx_munmap(mdbx_mmap_t *map) {
|
|||||||
if (!NT_SUCCESS(rc))
|
if (!NT_SUCCESS(rc))
|
||||||
ntstatus2errcode(rc);
|
ntstatus2errcode(rc);
|
||||||
|
|
||||||
if (map->filesize != map->current &&
|
|
||||||
mdbx_filesize(map->fd, &map->filesize) == MDBX_SUCCESS &&
|
|
||||||
map->filesize != map->current)
|
|
||||||
(void)mdbx_ftruncate(map->fd, map->current);
|
|
||||||
|
|
||||||
map->length = 0;
|
map->length = 0;
|
||||||
map->current = 0;
|
map->current = 0;
|
||||||
map->address = nullptr;
|
map->address = nullptr;
|
||||||
@ -922,8 +917,11 @@ int mdbx_mresize(int flags, mdbx_mmap_t *map, size_t size, size_t limit) {
|
|||||||
/* growth rw-section */
|
/* growth rw-section */
|
||||||
SectionSize.QuadPart = size;
|
SectionSize.QuadPart = size;
|
||||||
status = NtExtendSection(map->section, &SectionSize);
|
status = NtExtendSection(map->section, &SectionSize);
|
||||||
if (NT_SUCCESS(status))
|
if (NT_SUCCESS(status)) {
|
||||||
map->filesize = map->current = size;
|
map->current = size;
|
||||||
|
if (map->filesize < size)
|
||||||
|
map->filesize = size;
|
||||||
|
}
|
||||||
return ntstatus2errcode(status);
|
return ntstatus2errcode(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user