mdbx: ограничиваем размер отображения при коротком read-only файле.
Цель в предотвращении ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая совсем не информативна для пользователя и возникает в этом случае (когда файл открыт read-only и короче запрошенного размера).
This commit is contained in:
parent
56050f201f
commit
0159f97e94
|
@ -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, которая совсем
|
||||
не информативна для пользователя и возникает в этом случае.
|
||||
|
||||
Ликвидация технических долгов и мелочи:
|
||||
|
||||
- Исправление опечаток.
|
||||
|
|
13
src/osal.c
13
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 */
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue