From 52f52de2d512d3c0518fbbfb78fb6b5cbb818232 Mon Sep 17 00:00:00 2001 From: Leo Yuriev Date: Wed, 31 May 2017 18:58:55 +0300 Subject: [PATCH] mdbx: include meta-pages into a coredump. --- TODO.md | 2 +- src/mdbx.c | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/TODO.md b/TODO.md index e977a898..1c1c9a25 100644 --- a/TODO.md +++ b/TODO.md @@ -24,7 +24,7 @@ - [x] Добавить поле типа контрольной суммы. - [x] Добавить поле/флаг размера pgno_t. - [x] Поменять сигнатуры. -- [ ] Добавить мета-страницы в coredump, проверить lck +- [x] Добавить мета-страницы в coredump, проверить lck - [ ] Сделать список для txnid_t, кода sizeof(txnid_t) > sizeof(pgno_t) и вернуть размер pgno_t - [ ] Избавиться от умножения на размер страницы (заменить на сдвиг). - [ ] Устранение всех предупреждений (в том числе под Windows). diff --git a/src/mdbx.c b/src/mdbx.c index f3c1567e..a93bdab1 100644 --- a/src/mdbx.c +++ b/src/mdbx.c @@ -3858,9 +3858,12 @@ static int __cold mdbx_env_map(MDBX_env *env, void *addr, size_t usedsize) { (void)madvise(env->me_map, env->me_mapsize, MADV_NOHUGEPAGE); #endif -#ifdef MADV_DONTDUMP +#if defined(MADV_DODUMP) && defined(MADV_DONTDUMP) + const size_t meta_length = env->me_psize * NUM_METAS; + (void)madvise(env->me_map, env->me_psize * NUM_METAS, MADV_DODUMP); if (!(flags & MDBX_PAGEPERTURB)) - (void)madvise(env->me_map, env->me_mapsize, MADV_DONTDUMP); + (void)madvise(env->me_map + meta_length, env->me_mapsize - meta_length, + MADV_DONTDUMP); #endif #ifdef MADV_REMOVE @@ -4202,10 +4205,6 @@ static int __cold mdbx_setup_lck(MDBX_env *env, char *lck_pathname, int mode) { assert(addr != nullptr); env->me_lck = addr; -#ifdef MADV_NOHUGEPAGE - (void)madvise(env->me_lck, size, MADV_NOHUGEPAGE); -#endif - #ifdef MADV_DODUMP (void)madvise(env->me_lck, size, MADV_DODUMP); #endif