• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "test/jemalloc_test.h"
2 
3 #ifdef JEMALLOC_FILL
4 const char *malloc_conf =
5     "abort:false,junk:false,zero:true,redzone:false,quarantine:0";
6 #endif
7 
8 static void
test_zero(size_t sz_min,size_t sz_max)9 test_zero(size_t sz_min, size_t sz_max)
10 {
11 	char *s;
12 	size_t sz_prev, sz, i;
13 
14 	sz_prev = 0;
15 	s = (char *)mallocx(sz_min, 0);
16 	assert_ptr_not_null((void *)s, "Unexpected mallocx() failure");
17 
18 	for (sz = sallocx(s, 0); sz <= sz_max;
19 	    sz_prev = sz, sz = sallocx(s, 0)) {
20 		if (sz_prev > 0) {
21 			assert_c_eq(s[0], 'a',
22 			    "Previously allocated byte %zu/%zu is corrupted",
23 			    ZU(0), sz_prev);
24 			assert_c_eq(s[sz_prev-1], 'a',
25 			    "Previously allocated byte %zu/%zu is corrupted",
26 			    sz_prev-1, sz_prev);
27 		}
28 
29 		for (i = sz_prev; i < sz; i++) {
30 			assert_c_eq(s[i], 0x0,
31 			    "Newly allocated byte %zu/%zu isn't zero-filled",
32 			    i, sz);
33 			s[i] = 'a';
34 		}
35 
36 		if (xallocx(s, sz+1, 0, 0) == sz) {
37 			s = (char *)rallocx(s, sz+1, 0);
38 			assert_ptr_not_null((void *)s,
39 			    "Unexpected rallocx() failure");
40 		}
41 	}
42 
43 	dallocx(s, 0);
44 }
45 
TEST_BEGIN(test_zero_small)46 TEST_BEGIN(test_zero_small)
47 {
48 
49 	test_skip_if(!config_fill);
50 	test_zero(1, SMALL_MAXCLASS-1);
51 }
52 TEST_END
53 
TEST_BEGIN(test_zero_large)54 TEST_BEGIN(test_zero_large)
55 {
56 
57 	test_skip_if(!config_fill);
58 	test_zero(SMALL_MAXCLASS+1, large_maxclass);
59 }
60 TEST_END
61 
TEST_BEGIN(test_zero_huge)62 TEST_BEGIN(test_zero_huge)
63 {
64 
65 	test_skip_if(!config_fill);
66 	test_zero(large_maxclass+1, chunksize*2);
67 }
68 TEST_END
69 
70 int
main(void)71 main(void)
72 {
73 
74 	return (test(
75 	    test_zero_small,
76 	    test_zero_large,
77 	    test_zero_huge));
78 }
79