@@ -37,8 +37,6 @@ size_t zmalloc_usable_size(const void* p) {
3737void zfree (void * ptr ) {
3838 size_t usable = mi_usable_size (ptr );
3939
40- // I wish we can keep this assert but rdb_load creates objects in one thread and
41- // uses them in another.
4240 // assert(zmalloc_used_memory_tl >= (ssize_t)usable);
4341 zmalloc_used_memory_tl -= usable ;
4442
@@ -51,34 +49,34 @@ void* zrealloc(void* ptr, size_t size) {
5149}
5250
5351void * zcalloc (size_t size ) {
54- size_t usable = mi_good_size (size );
52+ // mi_good_size(size) is not working. try for example, size=690557.
5553
54+ void * res = mi_heap_calloc (zmalloc_heap , 1 , size );
55+ size_t usable = mi_usable_size (res );
5656 zmalloc_used_memory_tl += usable ;
5757
58- return mi_heap_calloc ( zmalloc_heap , 1 , size ) ;
58+ return res ;
5959}
6060
6161void * zmalloc_usable (size_t size , size_t * usable ) {
62- size_t g = mi_good_size (size );
63- * usable = g ;
64-
65- zmalloc_used_memory_tl += g ;
6662 assert (zmalloc_heap );
67- void * ptr = mi_heap_malloc (zmalloc_heap , g );
68- assert (mi_usable_size (ptr ) == g );
63+ void * res = mi_heap_malloc (zmalloc_heap , size );
64+ size_t uss = mi_usable_size (res );
65+ * usable = uss ;
6966
70- return ptr ;
67+ zmalloc_used_memory_tl += uss ;
68+
69+ return res ;
7170}
7271
7372void * zrealloc_usable (void * ptr , size_t size , size_t * usable ) {
74- size_t g = mi_good_size (size );
75- size_t prev = mi_usable_size (ptr );
76- * usable = g ;
73+ ssize_t prev = mi_usable_size (ptr );
74+
75+ void * res = mi_heap_realloc (zmalloc_heap , ptr , size );
76+ ssize_t uss = mi_usable_size (res );
77+ * usable = uss ;
78+ zmalloc_used_memory_tl += (uss - prev );
7779
78- zmalloc_used_memory_tl += (g - prev );
79- void * res = mi_heap_realloc (zmalloc_heap , ptr , g );
80- // does not hold, say when prev = 16 and size = 6. mi_malloc does not shrink in this case.
81- // assert(mi_usable_size(res) == g);
8280 return res ;
8381}
8482
@@ -87,8 +85,9 @@ size_t znallocx(size_t size) {
8785}
8886
8987void zfree_size (void * ptr , size_t size ) {
90- zmalloc_used_memory_tl -= size ;
91- mi_free_size (ptr , size );
88+ ssize_t uss = mi_usable_size (ptr );
89+ zmalloc_used_memory_tl -= uss ;
90+ mi_free_size (ptr , uss );
9291}
9392
9493void * ztrymalloc (size_t size ) {
0 commit comments