Home | History | Annotate | Download | only in unit
      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
      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 
     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 
     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 
     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
     71 main(void)
     72 {
     73 
     74 	return (test(
     75 	    test_zero_small,
     76 	    test_zero_large,
     77 	    test_zero_huge));
     78 }
     79