Skip to content

Commit fa006ee

Browse files
committed
Add umfIsFreeOpDefault(hProvider)
Add umfIsFreeOpDefault(hProvider) to check if op.ext.free is set to the default function pointer. Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
1 parent b0bfbb7 commit fa006ee

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

src/memory_pool.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
4343
if (!(flags & UMF_POOL_CREATE_FLAG_DISABLE_TRACKING)) {
4444
// Wrap provider with memory tracking provider.
4545
// Check if the provider supports the free() operation.
46-
bool upstreamDoesNotFree = (umfMemoryProviderFree(provider, NULL, 0) ==
47-
UMF_RESULT_ERROR_NOT_SUPPORTED);
46+
bool upstreamDoesNotFree = umfIsFreeOpDefault(provider);
4847
ret = umfTrackingMemoryProviderCreate(provider, pool, &pool->provider,
4948
upstreamDoesNotFree);
5049
if (ret != UMF_RESULT_SUCCESS) {

src/memory_provider.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,10 @@ static bool validateOps(const umf_memory_provider_ops_t *ops) {
169169
validateOpsIpc(&(ops->ipc));
170170
}
171171

172+
bool umfIsFreeOpDefault(umf_memory_provider_handle_t hProvider) {
173+
return (hProvider->ops.ext.free == umfDefaultFree);
174+
}
175+
172176
umf_result_t umfMemoryProviderCreate(const umf_memory_provider_ops_t *ops,
173177
void *params,
174178
umf_memory_provider_handle_t *hProvider) {

src/memory_provider_internal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#ifndef UMF_MEMORY_PROVIDER_INTERNAL_H
1111
#define UMF_MEMORY_PROVIDER_INTERNAL_H 1
1212

13+
#include <stdbool.h>
14+
1315
#include <umf/memory_provider.h>
1416

1517
#ifdef __cplusplus
@@ -18,6 +20,7 @@ extern "C" {
1820

1921
void *umfMemoryProviderGetPriv(umf_memory_provider_handle_t hProvider);
2022
umf_memory_provider_handle_t *umfGetLastFailedMemoryProviderPtr(void);
23+
bool umfIsFreeOpDefault(umf_memory_provider_handle_t hProvider);
2124

2225
#ifdef __cplusplus
2326
}

test/pools/disjoint_pool.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,7 @@ TEST_F(test, sharedLimits) {
8282
}
8383
umf_result_t free(void *ptr, [[maybe_unused]] size_t size) noexcept {
8484
::free(ptr);
85-
// umfMemoryProviderFree(provider, NULL, 0) is called inside umfPoolCreateInternal()
86-
if (ptr != NULL && size != 0) {
87-
numFrees++;
88-
}
85+
numFrees++;
8986
return UMF_RESULT_SUCCESS;
9087
}
9188
};

0 commit comments

Comments
 (0)