@@ -271,8 +271,6 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
271271 parent_value -> n_children -- ;
272272 }
273273
274- umf_ba_free (hTracker -> alloc_info_allocator , value );
275-
276274 return UMF_RESULT_SUCCESS ;
277275}
278276
@@ -339,8 +337,6 @@ umfMemoryTrackerRemoveIpcSegment(umf_memory_tracker_handle_t hTracker,
339337 (void * )hTracker , ptr , v -> size , (void * )v -> provider ,
340338 (void * )v -> ipc_cache_value );
341339
342- umf_ba_free (hTracker -> ipc_info_allocator , value );
343-
344340 return UMF_RESULT_SUCCESS ;
345341}
346342
@@ -664,8 +660,6 @@ static umf_result_t trackingAllocationMerge(void *hProvider, void *lowPtr,
664660 lowLevel , lowPtr , lowValue -> n_children , highPtr ,
665661 highValue -> n_children , totalSize );
666662
667- umf_ba_free (provider -> hTracker -> alloc_info_allocator , highValue );
668-
669663 return UMF_RESULT_SUCCESS ;
670664
671665err_fatal :
@@ -715,7 +709,6 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
715709 "size=%zu, ret = %d" ,
716710 ptr , size , ret );
717711 }
718- umf_ba_global_free (value );
719712 }
720713
721714 ret = umfMemoryProviderFree (p -> hUpstream , ptr , size );
@@ -1116,6 +1109,13 @@ umf_memory_provider_ops_t UMF_TRACKING_MEMORY_PROVIDER_OPS = {
11161109 .ipc .open_ipc_handle = trackingOpenIpcHandle ,
11171110 .ipc .close_ipc_handle = trackingCloseIpcHandle };
11181111
1112+ static void free_ipc_cache_value (void * unused , void * ipc_cache_value ) {
1113+ (void )unused ;
1114+ if (ipc_cache_value ) {
1115+ umf_ba_global_free (ipc_cache_value );
1116+ }
1117+ }
1118+
11191119umf_result_t umfTrackingMemoryProviderCreate (
11201120 umf_memory_provider_handle_t hUpstream , umf_memory_pool_handle_t hPool ,
11211121 umf_memory_provider_handle_t * hTrackingProvider ) {
@@ -1128,7 +1128,7 @@ umf_result_t umfTrackingMemoryProviderCreate(
11281128 return UMF_RESULT_ERROR_UNKNOWN ;
11291129 }
11301130 params .pool = hPool ;
1131- params .ipcCache = critnib_new (NULL , NULL );
1131+ params .ipcCache = critnib_new (free_ipc_cache_value , NULL );
11321132 if (!params .ipcCache ) {
11331133 LOG_ERR ("failed to create IPC cache" );
11341134 return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
@@ -1156,6 +1156,18 @@ void umfTrackingMemoryProviderGetUpstreamProvider(
11561156 * hUpstream = p -> hUpstream ;
11571157}
11581158
1159+ static void free_leaf (void * leaf_allocator , void * ptr ) {
1160+ if (ptr ) {
1161+ umf_ba_free (leaf_allocator , ptr );
1162+ }
1163+ }
1164+
1165+ static void free_ipc_segment (void * ipc_info_allocator , void * ptr ) {
1166+ if (ptr ) {
1167+ umf_ba_free (ipc_info_allocator , ptr );
1168+ }
1169+ }
1170+
11591171umf_memory_tracker_handle_t umfMemoryTrackerCreate (void ) {
11601172 umf_memory_tracker_handle_t handle =
11611173 umf_ba_global_alloc (sizeof (struct umf_memory_tracker_t ));
@@ -1180,7 +1192,8 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
11801192
11811193 int i ;
11821194 for (i = 0 ; i < MAX_LEVELS_OF_ALLOC_SEGMENT_MAP ; i ++ ) {
1183- handle -> alloc_segments_map [i ] = critnib_new (NULL , NULL );
1195+ handle -> alloc_segments_map [i ] =
1196+ critnib_new (free_leaf , alloc_info_allocator );
11841197 if (!handle -> alloc_segments_map [i ]) {
11851198 goto err_destroy_alloc_segments_map ;
11861199 }
@@ -1192,7 +1205,8 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
11921205 goto err_destroy_alloc_segments_map ;
11931206 }
11941207
1195- handle -> ipc_segments_map = critnib_new (NULL , NULL );
1208+ handle -> ipc_segments_map =
1209+ critnib_new (free_ipc_segment , handle -> ipc_info_allocator );
11961210 if (!handle -> ipc_segments_map ) {
11971211 goto err_destroy_ipc_info_allocator ;
11981212 }
0 commit comments