Skip to content

Commit d99bba0

Browse files
committed
Postpone freeing in critnib
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 226d13b commit d99bba0

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/pool/pool_disjoint.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,6 @@ static void destroy_slab(slab_t *slab) {
140140
if (res != UMF_RESULT_SUCCESS) {
141141
LOG_ERR("deallocation of slab data failed!");
142142
}
143-
144-
umf_ba_global_free(slab);
145143
}
146144

147145
static size_t slab_find_first_available_chunk_idx(const slab_t *slab) {
@@ -570,6 +568,13 @@ static void *disjoint_pool_allocate(disjoint_pool_t *pool, size_t size) {
570568
return ptr;
571569
}
572570

571+
static void free_slab(void *unused, void *slab) {
572+
(void)unused;
573+
if (slab) {
574+
umf_ba_global_free(slab);
575+
}
576+
}
577+
573578
umf_result_t disjoint_pool_initialize(umf_memory_provider_handle_t provider,
574579
const void *params, void **ppPool) {
575580
// TODO set defaults when user pass the NULL as params
@@ -597,7 +602,7 @@ umf_result_t disjoint_pool_initialize(umf_memory_provider_handle_t provider,
597602
disjoint_pool->provider = provider;
598603
disjoint_pool->params = *dp_params;
599604

600-
disjoint_pool->known_slabs = critnib_new(NULL, NULL);
605+
disjoint_pool->known_slabs = critnib_new(free_slab, NULL);
601606
if (disjoint_pool->known_slabs == NULL) {
602607
goto err_free_disjoint_pool;
603608
}

src/provider/provider_tracking.c

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

671665
err_fatal:
@@ -1116,6 +1110,15 @@ umf_memory_provider_ops_t UMF_TRACKING_MEMORY_PROVIDER_OPS = {
11161110
.ipc.open_ipc_handle = trackingOpenIpcHandle,
11171111
.ipc.close_ipc_handle = trackingCloseIpcHandle};
11181112

1113+
/*
1114+
static void free_ipc_cache_value(void *unused, void *ipc_cache_value) {
1115+
(void)unused;
1116+
if (ipc_cache_value) {
1117+
umf_ba_global_free(ipc_cache_value);
1118+
}
1119+
}
1120+
*/
1121+
11191122
umf_result_t umfTrackingMemoryProviderCreate(
11201123
umf_memory_provider_handle_t hUpstream, umf_memory_pool_handle_t hPool,
11211124
umf_memory_provider_handle_t *hTrackingProvider) {
@@ -1128,6 +1131,7 @@ umf_result_t umfTrackingMemoryProviderCreate(
11281131
return UMF_RESULT_ERROR_UNKNOWN;
11291132
}
11301133
params.pool = hPool;
1134+
// params.ipcCache = critnib_new(free_ipc_cache_value, NULL);
11311135
params.ipcCache = critnib_new(NULL, NULL);
11321136
if (!params.ipcCache) {
11331137
LOG_ERR("failed to create IPC cache");
@@ -1156,6 +1160,18 @@ void umfTrackingMemoryProviderGetUpstreamProvider(
11561160
*hUpstream = p->hUpstream;
11571161
}
11581162

1163+
static void free_leaf(void *leaf_allocator, void *ptr) {
1164+
if (ptr) {
1165+
umf_ba_free(leaf_allocator, ptr);
1166+
}
1167+
}
1168+
1169+
static void free_ipc_segment(void *ipc_info_allocator, void *ptr) {
1170+
if (ptr) {
1171+
umf_ba_free(ipc_info_allocator, ptr);
1172+
}
1173+
}
1174+
11591175
umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
11601176
umf_memory_tracker_handle_t handle =
11611177
umf_ba_global_alloc(sizeof(struct umf_memory_tracker_t));
@@ -1180,7 +1196,8 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
11801196

11811197
int i;
11821198
for (i = 0; i < MAX_LEVELS_OF_ALLOC_SEGMENT_MAP; i++) {
1183-
handle->alloc_segments_map[i] = critnib_new(NULL, NULL);
1199+
handle->alloc_segments_map[i] =
1200+
critnib_new(free_leaf, alloc_info_allocator);
11841201
if (!handle->alloc_segments_map[i]) {
11851202
goto err_destroy_alloc_segments_map;
11861203
}
@@ -1192,7 +1209,8 @@ umf_memory_tracker_handle_t umfMemoryTrackerCreate(void) {
11921209
goto err_destroy_alloc_segments_map;
11931210
}
11941211

1195-
handle->ipc_segments_map = critnib_new(NULL, NULL);
1212+
handle->ipc_segments_map =
1213+
critnib_new(free_ipc_segment, handle->ipc_info_allocator);
11961214
if (!handle->ipc_segments_map) {
11971215
goto err_destroy_ipc_info_allocator;
11981216
}

0 commit comments

Comments
 (0)