summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-02-14 21:08:26 +0100
committerGitHub <noreply@github.com>2022-02-14 21:08:26 +0100
commit8eb2ccf9ee6e3eec10fa212362c9f5ddbd3d85aa (patch)
tree05c5376b9da914a800a1d7fb063d24a144e0ef57
parent0398a97337753f648f31124f6e41724b7e0f47b0 (diff)
parentac7f0e10002fbfcfcc86707326571d94729c131b (diff)
Merge pull request #21187 from vespa-engine/balder/add-test-and-cleanup-on-unmap
Remove tracking of mmapping on unmap.
-rw-r--r--vespamalloc/src/tests/test1/CMakeLists.txt4
-rw-r--r--vespamalloc/src/tests/test1/testatomic.cpp27
-rw-r--r--vespamalloc/src/vespamalloc/malloc/mmappool.cpp1
3 files changed, 32 insertions, 0 deletions
diff --git a/vespamalloc/src/tests/test1/CMakeLists.txt b/vespamalloc/src/tests/test1/CMakeLists.txt
index 71e9ce272f9..dd7c92a4dac 100644
--- a/vespamalloc/src/tests/test1/CMakeLists.txt
+++ b/vespamalloc/src/tests/test1/CMakeLists.txt
@@ -2,6 +2,10 @@
vespa_add_executable(vespamalloc_testatomic_app TEST
SOURCES
testatomic.cpp
+ ../../vespamalloc/malloc/mmappool.cpp
+ ../../vespamalloc/malloc/common.cpp
+ DEPENDS
+ vespamalloc_util
EXTERNAL_DEPENDS
${VESPA_ATOMIC_LIB}
)
diff --git a/vespamalloc/src/tests/test1/testatomic.cpp b/vespamalloc/src/tests/test1/testatomic.cpp
index 1f0b2acaeef..76402c2570d 100644
--- a/vespamalloc/src/tests/test1/testatomic.cpp
+++ b/vespamalloc/src/tests/test1/testatomic.cpp
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/testkit/testapp.h>
#include <vespamalloc/malloc/allocchunk.h>
+#include <vespamalloc/malloc/mmappool.h>
TEST("verify lock freeness of atomics"){
{
@@ -20,4 +21,30 @@ TEST("verify lock freeness of atomics"){
}
+TEST("test explicit mmap/munmap") {
+ vespamalloc::MMapPool mmapPool;
+ EXPECT_EQUAL(0u, mmapPool.getNumMappings());
+ EXPECT_EQUAL(0u, mmapPool.getMmappedBytes());
+
+ void * mmap1 = mmapPool.mmap(0xe000);
+ EXPECT_EQUAL(1u, mmapPool.getNumMappings());
+ EXPECT_EQUAL(0xe000u, mmapPool.getMmappedBytes());
+ mmapPool.unmap(mmap1);
+ EXPECT_EQUAL(0u, mmapPool.getNumMappings());
+ EXPECT_EQUAL(0u, mmapPool.getMmappedBytes());
+ mmap1 = mmapPool.mmap(0xe000);
+ EXPECT_EQUAL(1u, mmapPool.getNumMappings());
+ EXPECT_EQUAL(0xe000u, mmapPool.getMmappedBytes());
+
+ void * mmap2 = mmapPool.mmap(0x1e000);
+ EXPECT_EQUAL(2u, mmapPool.getNumMappings());
+ EXPECT_EQUAL(0x2c000u, mmapPool.getMmappedBytes());
+ mmapPool.unmap(mmap1);
+ EXPECT_EQUAL(1u, mmapPool.getNumMappings());
+ EXPECT_EQUAL(0x1e000u, mmapPool.getMmappedBytes());
+ mmapPool.unmap(mmap2);
+ EXPECT_EQUAL(0u, mmapPool.getNumMappings());
+ EXPECT_EQUAL(0u, mmapPool.getMmappedBytes());
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/vespamalloc/src/vespamalloc/malloc/mmappool.cpp b/vespamalloc/src/vespamalloc/malloc/mmappool.cpp
index 296471e54a2..e693ce0de46 100644
--- a/vespamalloc/src/vespamalloc/malloc/mmappool.cpp
+++ b/vespamalloc/src/vespamalloc/malloc/mmappool.cpp
@@ -95,6 +95,7 @@ MMapPool::unmap(void * ptr) {
abort();
}
sz = found->second._sz;
+ _mappings.erase(found);
}
int munmap_ok = ::munmap(ptr, sz);
assert(munmap_ok == 0);