aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJason Evans <jasone@canonware.com>2016-05-03 09:37:54 -0700
committerJason Evans <jasone@canonware.com>2016-05-03 09:37:54 -0700
commit9aa1543e9c1cdd8373985e16e4610fd84caafd85 (patch)
treed996e8796bfa8f86f27e51ae416e79946793eeba /test
parent108c4a11e96d57fd71751efa23ab986a236a0c7d (diff)
downloadjemalloc-9aa1543e9c1cdd8373985e16e4610fd84caafd85.tar.gz
Update mallocx() OOM test to deal with smaller hugemax.
Depending on virtual memory resource limits, it is necessary to attempt allocating three maximally sized objects to trigger OOM rather than just two, since the maximum supported size is slightly less than half the total virtual memory address space. This fixes a test failure that was introduced by 0c516a00c4cb28cff55ce0995f756b5aae074c9e (Make *allocx() size class overflow behavior defined.). This resolves #379.
Diffstat (limited to 'test')
-rw-r--r--test/integration/mallocx.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/test/integration/mallocx.c b/test/integration/mallocx.c
index d82bf42..578c229 100644
--- a/test/integration/mallocx.c
+++ b/test/integration/mallocx.c
@@ -69,19 +69,28 @@ TEST_END
TEST_BEGIN(test_oom)
{
+ size_t hugemax;
+ bool oom;
+ void *ptrs[3];
+ unsigned i;
/*
- * It should be impossible to allocate two objects that each consume
- * more than half the virtual address space.
+ * It should be impossible to allocate three objects that each consume
+ * nearly half the virtual address space.
*/
- {
- size_t hugemax = get_huge_size(get_nhuge()-1);
- void *p = mallocx(hugemax, 0);
- if (p != NULL) {
- assert_ptr_null(mallocx(hugemax, 0),
- "Expected OOM for mallocx(size=%#zx, 0)", hugemax);
- dallocx(p, 0);
- }
+ hugemax = get_huge_size(get_nhuge()-1);
+ oom = false;
+ for (i = 0; i < sizeof(ptrs) / sizeof(void *); i++) {
+ ptrs[i] = mallocx(hugemax, 0);
+ if (ptrs[i] == NULL)
+ oom = true;
+ }
+ assert_true(oom,
+ "Expected OOM during series of calls to mallocx(size=%zu, 0)",
+ hugemax);
+ for (i = 0; i < sizeof(ptrs) / sizeof(void *); i++) {
+ if (ptrs[i] != NULL)
+ dallocx(ptrs[i], 0);
}
#if LG_SIZEOF_PTR == 3