• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
prof_dump_open_intercept(bool propagate_err,const char * filename)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 
TEST_BEGIN(test_gdump)22 TEST_BEGIN(test_gdump)
23 {
24 	bool active;
25 	void *p, *q;
26 
27 	test_skip_if(!config_prof);
28 
29 	active = true;
30 	assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
31 	    0, "Unexpected mallctl failure while activating profiling");
32 
33 	prof_dump_open = prof_dump_open_intercept;
34 
35 	did_prof_dump_open = false;
36 	p = mallocx(chunksize, 0);
37 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
38 	assert_true(did_prof_dump_open, "Expected a profile dump");
39 
40 	did_prof_dump_open = false;
41 	q = mallocx(chunksize, 0);
42 	assert_ptr_not_null(q, "Unexpected mallocx() failure");
43 	assert_true(did_prof_dump_open, "Expected a profile dump");
44 
45 	dallocx(p, 0);
46 	dallocx(q, 0);
47 }
48 TEST_END
49 
50 int
main(void)51 main(void)
52 {
53 
54 	return (test(
55 	    test_gdump));
56 }
57