]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | #include "test/jemalloc_test.h" |
2 | ||
3 | #ifdef JEMALLOC_PROF | |
4 | const char *malloc_conf = "prof:true,prof_active:false,prof_gdump:true"; | |
5 | #endif | |
6 | ||
7 | static bool did_prof_dump_open; | |
8 | ||
9 | static int | |
10 | prof_dump_open_intercept(bool propagate_err, const char *filename) | |
11 | { | |
12 | int fd; | |
13 | ||
14 | did_prof_dump_open = true; | |
15 | ||
16 | fd = open("/dev/null", O_WRONLY); | |
17 | assert_d_ne(fd, -1, "Unexpected open() failure"); | |
18 | ||
19 | return (fd); | |
20 | } | |
21 | ||
22 | TEST_BEGIN(test_gdump) | |
23 | { | |
54a0048b SL |
24 | bool active, gdump, gdump_old; |
25 | void *p, *q, *r, *s; | |
26 | size_t sz; | |
1a4d82fc JJ |
27 | |
28 | test_skip_if(!config_prof); | |
29 | ||
30 | active = true; | |
31 | assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)), | |
32 | 0, "Unexpected mallctl failure while activating profiling"); | |
33 | ||
34 | prof_dump_open = prof_dump_open_intercept; | |
35 | ||
36 | did_prof_dump_open = false; | |
37 | p = mallocx(chunksize, 0); | |
38 | assert_ptr_not_null(p, "Unexpected mallocx() failure"); | |
39 | assert_true(did_prof_dump_open, "Expected a profile dump"); | |
40 | ||
41 | did_prof_dump_open = false; | |
42 | q = mallocx(chunksize, 0); | |
43 | assert_ptr_not_null(q, "Unexpected mallocx() failure"); | |
44 | assert_true(did_prof_dump_open, "Expected a profile dump"); | |
45 | ||
54a0048b SL |
46 | gdump = false; |
47 | sz = sizeof(gdump_old); | |
48 | assert_d_eq(mallctl("prof.gdump", &gdump_old, &sz, &gdump, | |
49 | sizeof(gdump)), 0, | |
50 | "Unexpected mallctl failure while disabling prof.gdump"); | |
51 | assert(gdump_old); | |
52 | did_prof_dump_open = false; | |
53 | r = mallocx(chunksize, 0); | |
54 | assert_ptr_not_null(q, "Unexpected mallocx() failure"); | |
55 | assert_false(did_prof_dump_open, "Unexpected profile dump"); | |
56 | ||
57 | gdump = true; | |
58 | sz = sizeof(gdump_old); | |
59 | assert_d_eq(mallctl("prof.gdump", &gdump_old, &sz, &gdump, | |
60 | sizeof(gdump)), 0, | |
61 | "Unexpected mallctl failure while enabling prof.gdump"); | |
62 | assert(!gdump_old); | |
63 | did_prof_dump_open = false; | |
64 | s = mallocx(chunksize, 0); | |
65 | assert_ptr_not_null(q, "Unexpected mallocx() failure"); | |
66 | assert_true(did_prof_dump_open, "Expected a profile dump"); | |
67 | ||
1a4d82fc JJ |
68 | dallocx(p, 0); |
69 | dallocx(q, 0); | |
54a0048b SL |
70 | dallocx(r, 0); |
71 | dallocx(s, 0); | |
1a4d82fc JJ |
72 | } |
73 | TEST_END | |
74 | ||
75 | int | |
76 | main(void) | |
77 | { | |
78 | ||
79 | return (test( | |
80 | test_gdump)); | |
81 | } |