Skip to content

Commit 297fa3e

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

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)