Skip to content

Commit 32159d0

Browse files
committed
Replace linear base allocator with the fixed-size in the tracker
Replace linear base allocator with the fixed-size in trackingInitialize() and trackingFinalize(). Signed-off-by: Lukasz Dorau <[email protected]>
1 parent fb6bded commit 32159d0

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

src/provider/provider_tracking.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99

1010
#include "provider_tracking.h"
11+
#include "base_alloc_global.h"
1112
#include "critnib.h"
1213
#include "utils_concurrency.h"
1314

@@ -106,6 +107,8 @@ typedef struct umf_tracking_memory_provider_t {
106107
umf_memory_provider_handle_t hUpstream;
107108
umf_memory_tracker_handle_t hTracker;
108109
umf_memory_pool_handle_t pool;
110+
// saved pointer to the global base allocator
111+
umf_ba_pool_t *base_allocator;
109112
} umf_tracking_memory_provider_t;
110113

111114
typedef struct umf_tracking_memory_provider_t umf_tracking_memory_provider_t;
@@ -325,17 +328,23 @@ static umf_result_t trackingFree(void *hProvider, void *ptr, size_t size) {
325328
}
326329

327330
static umf_result_t trackingInitialize(void *params, void **ret) {
328-
umf_tracking_memory_provider_t *p =
329-
(umf_tracking_memory_provider_t *)params;
331+
umf_ba_pool_t *base_allocator =
332+
umf_ba_get_pool(sizeof(umf_tracking_memory_provider_t));
333+
if (!base_allocator) {
334+
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
335+
}
336+
330337
umf_tracking_memory_provider_t *provider =
331-
(umf_tracking_memory_provider_t *)umf_ba_linear_alloc(
332-
p->hTracker->pool_linear, sizeof(umf_tracking_memory_provider_t));
338+
(umf_tracking_memory_provider_t *)umf_ba_alloc(base_allocator);
333339
if (!provider) {
334340
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
335341
}
336342

337343
*provider = *((umf_tracking_memory_provider_t *)params);
344+
provider->base_allocator = base_allocator;
345+
338346
*ret = provider;
347+
339348
return UMF_RESULT_SUCCESS;
340349
}
341350

@@ -375,16 +384,14 @@ static void check_if_tracker_is_empty(umf_memory_tracker_handle_t hTracker,
375384
#endif /* NDEBUG */
376385

377386
static void trackingFinalize(void *provider) {
378-
#ifndef NDEBUG
379387
umf_tracking_memory_provider_t *p =
380388
(umf_tracking_memory_provider_t *)provider;
389+
390+
#ifndef NDEBUG
381391
check_if_tracker_is_empty(p->hTracker, p->pool);
382392
#endif /* NDEBUG */
383393

384-
(void)provider; // unused in Release build
385-
// provider was allocated from the linear allocator,
386-
// so it will be freed, when the linear allocator is destroyed
387-
// in umfMemoryTrackerDestroy()
394+
umf_ba_free(p->base_allocator, provider);
388395
}
389396

390397
static void trackingGetLastError(void *provider, const char **msg,

0 commit comments

Comments
 (0)