summaryrefslogtreecommitdiffstats
path: root/deps/jemalloc/test/stress/mallctl.c
blob: d29b3118471fe0c364cc58ccacfdb9cc2cc08d6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "test/jemalloc_test.h"
#include "test/bench.h"

static void
mallctl_short(void) {
	const char *version;
	size_t sz = sizeof(version);
	int err = mallctl("version", &version, &sz, NULL, 0);
	assert_d_eq(err, 0, "mallctl failure");
}

size_t mib_short[1];

static void
mallctlbymib_short(void) {
	size_t miblen = sizeof(mib_short)/sizeof(mib_short[0]);
	const char *version;
	size_t sz = sizeof(version);
	int err = mallctlbymib(mib_short, miblen, &version, &sz, NULL, 0);
	assert_d_eq(err, 0, "mallctlbymib failure");
}

TEST_BEGIN(test_mallctl_vs_mallctlbymib_short) {
	size_t miblen = sizeof(mib_short)/sizeof(mib_short[0]);

	int err = mallctlnametomib("version", mib_short, &miblen);
	assert_d_eq(err, 0, "mallctlnametomib failure");
	compare_funcs(10*1000*1000, 10*1000*1000, "mallctl_short",
	    mallctl_short, "mallctlbymib_short", mallctlbymib_short);
}
TEST_END

static void
mallctl_long(void) {
	uint64_t nmalloc;
	size_t sz = sizeof(nmalloc);
	int err = mallctl("stats.arenas.0.bins.0.nmalloc", &nmalloc, &sz, NULL,
	    0);
	assert_d_eq(err, 0, "mallctl failure");
}

size_t mib_long[6];

static void
mallctlbymib_long(void) {
	size_t miblen = sizeof(mib_long)/sizeof(mib_long[0]);
	uint64_t nmalloc;
	size_t sz = sizeof(nmalloc);
	int err = mallctlbymib(mib_long, miblen, &nmalloc, &sz, NULL, 0);
	assert_d_eq(err, 0, "mallctlbymib failure");
}

TEST_BEGIN(test_mallctl_vs_mallctlbymib_long) {
	/*
	 * We want to use the longest mallctl we have; that needs stats support
	 * to be allowed.
	 */
	test_skip_if(!config_stats);

	size_t miblen = sizeof(mib_long)/sizeof(mib_long[0]);
	int err = mallctlnametomib("stats.arenas.0.bins.0.nmalloc", mib_long,
	    &miblen);
	assert_d_eq(err, 0, "mallctlnametomib failure");
	compare_funcs(10*1000*1000, 10*1000*1000, "mallctl_long",
	    mallctl_long, "mallctlbymib_long", mallctlbymib_long);
}
TEST_END

int
main(void) {
	return test_no_reentrancy(
	    test_mallctl_vs_mallctlbymib_short,
	    test_mallctl_vs_mallctlbymib_long);
}