From b2657c5d73d4940b2aa94b066d7d6bdc5e1be078 Mon Sep 17 00:00:00 2001 From: Utz-Uwe Haus <uhaus@daint103.login.cscs.ch> Date: Mon, 23 Nov 2020 11:33:13 +0100 Subject: [PATCH] add mstro_memlock_finalize function --- include/maestro/i_memlock.h | 6 ++++++ maestro/core.c | 2 +- maestro/memlock.c | 24 ++++++++++++++++++++++++ tests/check_memlock.c | 5 +++-- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/include/maestro/i_memlock.h b/include/maestro/i_memlock.h index 98667a78..201d5a20 100644 --- a/include/maestro/i_memlock.h +++ b/include/maestro/i_memlock.h @@ -83,6 +83,12 @@ mstro_memunlock(void* addr, size_t len); mstro_status mstro_memlock_init(size_t min_required); +/**@brief De-Initialize the memlock subsystem + * + */ +mstro_status +mstro_memlock_finalize(void); + /**@} (end of group MSTRO_I_MEMLOCK) */ /**@} (end of group MSTRO_Internal) */ diff --git a/maestro/core.c b/maestro/core.c index 7bac92b8..83c1fdfb 100644 --- a/maestro/core.c +++ b/maestro/core.c @@ -371,7 +371,7 @@ mstro_core_finalize(void) goto BAILOUT; } - status = MSTRO_OK; + status = mstro_memlock_finalize(); BAILOUT: return status; diff --git a/maestro/memlock.c b/maestro/memlock.c index 51bcc0d6..863ec81a 100644 --- a/maestro/memlock.c +++ b/maestro/memlock.c @@ -14,6 +14,8 @@ #include <pthread.h> #include <sys/mman.h> #include <errno.h> +#include <sys/time.h> +#include <sys/resource.h> /* Terminology: * @@ -119,6 +121,28 @@ mstro_memlock_init(size_t min_required) } +mstro_status +mstro_memlock_finalize(void) +{ + mstro_status s=MSTRO_OK; + + WITH_LOCKED_PAGETABLE({ + if(g_locked_pages) { + if(kh_size(g_locked_pages)!=0) { + ERR("Table of locked page-sets nonempty: %d live entries\n", + kh_size(g_locked_pages)); + s=MSTRO_FAIL; + } + kh_destroy(page_set, g_locked_pages); + } else { + ERR("called before init, or called twice\n"); + } + }, BAILOUT); +BAILOUT: + return s; +} + + /** check whether @arg page is locked. * * Must be called while holding @ref g_locked_pages_mtx. diff --git a/tests/check_memlock.c b/tests/check_memlock.c index cc8e4f84..7a9719eb 100644 --- a/tests/check_memlock.c +++ b/tests/check_memlock.c @@ -56,6 +56,7 @@ CHEAT_TEST(lock_unlock, cheat_assert(MSTRO_OK==mstro_memunlock(x,8000)); free(x); + cheat_assert(MSTRO_OK==mstro_memlock_finalize()); }) @@ -78,6 +79,7 @@ CHEAT_TEST(lock_unlock_multi, cheat_assert(MSTRO_FAIL==mstro_memunlock(x,8000)); free(x); + cheat_assert(MSTRO_OK==mstro_memlock_finalize()); }) CHEAT_TEST(lock_overlapping, @@ -108,6 +110,5 @@ CHEAT_TEST(lock_overlapping, cheat_assert(MSTRO_OK==mstro_memunlock(start3, len3)); free(x); - - + cheat_assert(MSTRO_OK==mstro_memlock_finalize()); }) -- GitLab