Skip to content

Commit b4d91c3

Browse files
committed
Add umfPoolGetTrackingProvider()
Add umfPoolGetTrackingProvider() to get the tracking provider of the original memory pool. Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 279f8cb commit b4d91c3

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

src/memory_pool.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,22 @@ umf_result_t umfPoolGetMemoryProvider(umf_memory_pool_handle_t hPool,
136136
return UMF_RESULT_SUCCESS;
137137
}
138138

139+
umf_result_t
140+
umfPoolGetTrackingProvider(umf_memory_pool_handle_t hPool,
141+
umf_memory_provider_handle_t *hProvider) {
142+
if (!hPool || !hProvider) {
143+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
144+
}
145+
146+
if (hPool->flags & UMF_POOL_CREATE_FLAG_DISABLE_TRACKING) {
147+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
148+
}
149+
150+
*hProvider = umfMemoryProviderGetPriv(hPool->provider);
151+
152+
return UMF_RESULT_SUCCESS;
153+
}
154+
139155
umf_result_t umfPoolCreate(const umf_memory_pool_ops_t *ops,
140156
umf_memory_provider_handle_t provider, void *params,
141157
umf_pool_create_flags_t flags,

src/memory_pool_internal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ typedef struct umf_memory_pool_t {
3636
void *tag;
3737
} umf_memory_pool_t;
3838

39+
umf_result_t
40+
umfPoolGetTrackingProvider(umf_memory_pool_handle_t hPool,
41+
umf_memory_provider_handle_t *hProvider);
42+
3943
#ifdef __cplusplus
4044
}
4145
#endif

src/provider/provider_fixed_memory.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "base_alloc_global.h"
2121
#include "coarse.h"
2222
#include "libumf.h"
23+
#include "memory_pool_internal.h"
2324
#include "utils_common.h"
2425
#include "utils_concurrency.h"
2526
#include "utils_log.h"
@@ -34,6 +35,8 @@ typedef struct fixed_memory_provider_t {
3435

3536
// used only when the UMF_FIXED_FLAG_CREATE_FROM_POOL_PTR flag is set
3637
size_t ptr_orig_size; // original size of the memory region in the tracker
38+
umf_memory_provider_handle_t
39+
trackingProvider; // tracking provider of the original memory pool
3740
} fixed_memory_provider_t;
3841

3942
// Fixed Memory provider settings struct
@@ -89,6 +92,7 @@ static umf_result_t fixed_allocation_merge_cb(void *provider, void *lowPtr,
8992
static umf_result_t fixed_initialize(void *params, void **provider) {
9093
umf_result_t ret;
9194
size_t ptr_orig_size = 0;
95+
umf_memory_provider_handle_t trackingProvider = NULL;
9296

9397
if (params == NULL) {
9498
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
@@ -104,6 +108,12 @@ static umf_result_t fixed_initialize(void *params, void **provider) {
104108
"the given pointer does not belong to any UMF pool");
105109
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
106110
}
111+
112+
ret = umfPoolGetTrackingProvider(pool, &trackingProvider);
113+
if (ret != UMF_RESULT_SUCCESS) {
114+
LOG_ERR("cannot get the tracking provider of the pool %p", pool);
115+
return ret;
116+
}
107117
}
108118

109119
fixed_memory_provider_t *fixed_provider =
@@ -139,6 +149,7 @@ static umf_result_t fixed_initialize(void *params, void **provider) {
139149
fixed_provider->size = in_params->size;
140150
fixed_provider->flags = in_params->flags;
141151
fixed_provider->ptr_orig_size = ptr_orig_size;
152+
fixed_provider->trackingProvider = trackingProvider;
142153

143154
// add the entire memory as a single block
144155
ret = coarse_add_memory_fixed(coarse, fixed_provider->base,

0 commit comments

Comments
 (0)