• 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 	uint8_t *s;
12 	size_t sz_prev, sz, i;
13 #define	MAGIC	((uint8_t)0x61)
14 
15 	sz_prev = 0;
16 	s = (uint8_t *)mallocx(sz_min, 0);
17 	assert_ptr_not_null((void *)s, "Unexpected mallocx() failure");
18 
19 	for (sz = sallocx(s, 0); sz <= sz_max;
20 	    sz_prev = sz, sz = sallocx(s, 0)) {
21 		if (sz_prev > 0) {
22 			assert_u_eq(s[0], MAGIC,
23 			    "Previously allocated byte %zu/%zu is corrupted",
24 			    ZU(0), sz_prev);
25 			assert_u_eq(s[sz_prev-1], MAGIC,
26 			    "Previously allocated byte %zu/%zu is corrupted",
27 			    sz_prev-1, sz_prev);
28 		}
29 
30 		for (i = sz_prev; i < sz; i++) {
31 			assert_u_eq(s[i], 0x0,
32 			    "Newly allocated byte %zu/%zu isn't zero-filled",
33 			    i, sz);
34 			s[i] = MAGIC;
35 		}
36 
37 		if (xallocx(s, sz+1, 0, 0) == sz) {
38 			s = (uint8_t *)rallocx(s, sz+1, 0);
39 			assert_ptr_not_null((void *)s,
40 			    "Unexpected rallocx() failure");
41 		}
42 	}
43 
44 	dallocx(s, 0);
45 #undef MAGIC
46 }
47 
TEST_BEGIN(test_zero_small)48 TEST_BEGIN(test_zero_small)
49 {
50 
51 	test_skip_if(!config_fill);
52 	test_zero(1, SMALL_MAXCLASS-1);
53 }
54 TEST_END
55 
TEST_BEGIN(test_zero_large)56 TEST_BEGIN(test_zero_large)
57 {
58 
59 	test_skip_if(!config_fill);
60 	test_zero(SMALL_MAXCLASS+1, large_maxclass);
61 }
62 TEST_END
63 
TEST_BEGIN(test_zero_huge)64 TEST_BEGIN(test_zero_huge)
65 {
66 
67 	test_skip_if(!config_fill);
68 	test_zero(large_maxclass+1, chunksize*2);
69 }
70 TEST_END
71 
72 int
main(void)73 main(void)
74 {
75 
76 	return (test(
77 	    test_zero_small,
78 	    test_zero_large,
79 	    test_zero_huge));
80 }
81