aboutsummaryrefslogtreecommitdiff
path: root/tests/testutils.c
diff options
context:
space:
mode:
authorJan Stancek <jstancek@redhat.com>2012-09-06 13:12:22 +0200
committerEric B Munson <emunson@mgebm.net>2012-09-06 21:39:54 -0400
commitcdd2fa336d9980eb268a775b7cf9c49e3b698cd7 (patch)
tree8f69b8e28775f59644fd7e6083c735fc4f563358 /tests/testutils.c
parent97a6efd9d0c660d4bdabdb579635c46c3f20e156 (diff)
downloadlibhugetlbfs-cdd2fa336d9980eb268a775b7cf9c49e3b698cd7.tar.gz
exhaust malloc arenas before malloc tests
First allocation in malloc tests is just 1024 bytes. If there is enough free mem in malloc arenas, this first allocation can be satisfied without call to MORECORE() and testcase will fail. LD_PRELOAD=libhugetlbfs.so HUGETLB_MORECORE=yes malloc (2M: 64): FAIL Address is not hugepage When looking at output from HUGETLB_DEBUG=1 it appears that hook to __morecore doesn't work as there is no trace from hugetlbfs_morecore. This patch will keep malloc-ing 1-byte chunks of memory as long as it comes from '[heap]' or maximum is reached. This will force glibc to call MORECORE() before actual malloc/malloc_manysmall test begins. Signed-off-by: Jan Stancek <jstancek@redhat.com> Signed-off-by: Eric B Munson <emunson@mgebm.net>
Diffstat (limited to 'tests/testutils.c')
-rw-r--r--tests/testutils.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/testutils.c b/tests/testutils.c
index 68d8e62..2dc5d5d 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -162,6 +162,42 @@ static int read_maps(unsigned long addr, char *buf)
return 0;
}
+/* malloc memory one byte at a time until:
+ * - max limit is reached
+ * - malloc-ed memory is no longer on heap
+ */
+int consume_heap(long max)
+{
+ char aname[256];
+ int ret;
+ long consumed = 0;
+ void *p;
+
+ while (1) {
+ p = malloc(1);
+ if (p == NULL)
+ FAIL("Could not malloc memory");
+
+ ret = read_maps((unsigned long)p, aname);
+ if (ret <= 0)
+ FAIL("read_maps ret <= 0");
+
+ if (strstr(aname, "heap") == NULL) {
+ ret = 0;
+ break;
+ }
+
+ consumed++;
+ if (consumed > max) {
+ verbose_printf("Warning: heap unexpectedly large\n");
+ ret = 1;
+ break;
+ }
+ }
+ verbose_printf("malloc-ed %ld bytes from heap\n", consumed);
+ return ret;
+}
+
/*
* With the inclusion of MAP_HUGETLB it is now possible to have huge pages
* without using hugetlbfs, so not all huge page regions will show with the