diff --git a/ChangeLog.md b/ChangeLog.md index dd1921a6..1dbd33b9 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -6,6 +6,12 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic ## v0.13 (в разработке) +Исправления (без корректировок новых функций): + + - Ограничиваем размер отображения при коротком read-only файле для + предотвращении ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая совсем + не информативна для пользователя и возникает в этом случае. + Ликвидация технических долгов и мелочи: - Исправление опечаток. diff --git a/src/osal.c b/src/osal.c index 5e7606c1..dfe528e1 100644 --- a/src/osal.c +++ b/src/osal.c @@ -2160,9 +2160,8 @@ static int check_mmap_limit(const size_t limit) { return MDBX_SUCCESS; } -MDBX_INTERNAL_FUNC int osal_mmap(const int flags, osal_mmap_t *map, - const size_t size, const size_t limit, - const unsigned options) { +MDBX_INTERNAL_FUNC int osal_mmap(const int flags, osal_mmap_t *map, size_t size, + const size_t limit, const unsigned options) { assert(size <= limit); map->limit = 0; map->current = 0; @@ -2192,7 +2191,13 @@ MDBX_INTERNAL_FUNC int osal_mmap(const int flags, osal_mmap_t *map, err = osal_filesize(map->fd, &map->filesize); if (err != MDBX_SUCCESS) return err; -#if !(defined(_WIN32) || defined(_WIN64)) +#if defined(_WIN32) || defined(_WIN64) + if (map->filesize < size) { + WARNING("file size (%zu) less than requested for mapping (%zu)", + (size_t)map->filesize, size); + size = (size_t)map->filesize; + } +#else map->current = (map->filesize > limit) ? limit : (size_t)map->filesize; #endif /* !Windows */ } diff --git a/src/osal.h b/src/osal.h index 6eb519aa..77277279 100644 --- a/src/osal.h +++ b/src/osal.h @@ -577,9 +577,8 @@ MDBX_INTERNAL_FUNC int osal_lockfile(mdbx_filehandle_t fd, bool wait); #define MMAP_OPTION_TRUNCATE 1 #define MMAP_OPTION_SEMAPHORE 2 -MDBX_INTERNAL_FUNC int osal_mmap(const int flags, osal_mmap_t *map, - const size_t must, const size_t limit, - const unsigned options); +MDBX_INTERNAL_FUNC int osal_mmap(const int flags, osal_mmap_t *map, size_t size, + const size_t limit, const unsigned options); MDBX_INTERNAL_FUNC int osal_munmap(osal_mmap_t *map); #define MDBX_MRESIZE_MAY_MOVE 0x00000100 #define MDBX_MRESIZE_MAY_UNMAP 0x00000200