Skip to content

Commit efd6071

Browse files
authored
Merge pull request #201 from igchor/expose_pool_provider
Expose provider/pool ops through a getter function
2 parents e637ef8 + 9cf9b83 commit efd6071

17 files changed

+52
-36
lines changed

benchmark/ubench.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ UBENCH_EX(simple, os_memory_provider) {
139139

140140
enum umf_result_t umf_result;
141141
umf_memory_provider_handle_t os_memory_provider = NULL;
142-
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
142+
umf_result = umfMemoryProviderCreate(umfOsMemoryProviderOps(),
143143
&UMF_OS_MEMORY_PROVIDER_PARAMS,
144144
&os_memory_provider);
145145
if (umf_result != UMF_RESULT_SUCCESS) {
@@ -188,7 +188,7 @@ UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
188188

189189
enum umf_result_t umf_result;
190190
umf_memory_provider_handle_t os_memory_provider = NULL;
191-
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
191+
umf_result = umfMemoryProviderCreate(umfOsMemoryProviderOps(),
192192
&UMF_OS_MEMORY_PROVIDER_PARAMS,
193193
&os_memory_provider);
194194
if (umf_result != UMF_RESULT_SUCCESS) {
@@ -204,7 +204,7 @@ UBENCH_EX(simple, disjoint_pool_with_os_memory_provider) {
204204
disjoint_memory_pool_params.PoolTrace = DISJOINT_POOL_TRACE;
205205

206206
umf_memory_pool_handle_t disjoint_pool;
207-
umf_result = umfPoolCreate(&UMF_DISJOINT_POOL_OPS, os_memory_provider,
207+
umf_result = umfPoolCreate(umfDisjointPoolOps(), os_memory_provider,
208208
&disjoint_memory_pool_params, 0, &disjoint_pool);
209209
if (umf_result != UMF_RESULT_SUCCESS) {
210210
exit(-1);
@@ -233,15 +233,15 @@ UBENCH_EX(simple, jemalloc_pool_with_os_memory_provider) {
233233

234234
enum umf_result_t umf_result;
235235
umf_memory_provider_handle_t os_memory_provider = NULL;
236-
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
236+
umf_result = umfMemoryProviderCreate(umfOsMemoryProviderOps(),
237237
&UMF_OS_MEMORY_PROVIDER_PARAMS,
238238
&os_memory_provider);
239239
if (umf_result != UMF_RESULT_SUCCESS) {
240240
exit(-1);
241241
}
242242

243243
umf_memory_pool_handle_t jemalloc_pool;
244-
umf_result = umfPoolCreate(&UMF_JEMALLOC_POOL_OPS, os_memory_provider, NULL,
244+
umf_result = umfPoolCreate(umfJemallocPoolOps(), os_memory_provider, NULL,
245245
0, &jemalloc_pool);
246246
if (umf_result != UMF_RESULT_SUCCESS) {
247247
exit(-1);
@@ -270,15 +270,15 @@ UBENCH_EX(simple, scalable_pool_with_os_memory_provider) {
270270

271271
enum umf_result_t umf_result;
272272
umf_memory_provider_handle_t os_memory_provider = NULL;
273-
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
273+
umf_result = umfMemoryProviderCreate(umfOsMemoryProviderOps(),
274274
&UMF_OS_MEMORY_PROVIDER_PARAMS,
275275
&os_memory_provider);
276276
if (umf_result != UMF_RESULT_SUCCESS) {
277277
exit(-1);
278278
}
279279

280280
umf_memory_pool_handle_t scalable_pool;
281-
umf_result = umfPoolCreate(&UMF_SCALABLE_POOL_OPS, os_memory_provider, NULL,
281+
umf_result = umfPoolCreate(umfScalablePoolOps(), os_memory_provider, NULL,
282282
0, &scalable_pool);
283283
if (umf_result != UMF_RESULT_SUCCESS) {
284284
exit(-1);

include/umf/pools/pool_disjoint.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ typedef struct umf_disjoint_pool_params_t {
6060
const char *Name;
6161
} umf_disjoint_pool_params_t;
6262

63-
extern umf_memory_pool_ops_t UMF_DISJOINT_POOL_OPS;
63+
umf_memory_pool_ops_t *umfDisjointPoolOps(void);
6464

6565
/// @brief Create default params struct for disjoint pool
6666
static inline umf_disjoint_pool_params_t umfDisjointPoolParamsDefault(void) {

include/umf/pools/pool_jemalloc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ extern "C" {
1616

1717
#include <umf/memory_pool_ops.h>
1818

19-
extern umf_memory_pool_ops_t UMF_JEMALLOC_POOL_OPS;
19+
umf_memory_pool_ops_t *umfJemallocPoolOps(void);
2020

2121
#ifdef __cplusplus
2222
}

include/umf/pools/pool_scalable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extern "C" {
1717
#include <umf/memory_pool.h>
1818
#include <umf/memory_provider.h>
1919

20-
extern umf_memory_pool_ops_t UMF_SCALABLE_POOL_OPS;
20+
umf_memory_pool_ops_t *umfScalablePoolOps(void);
2121

2222
#ifdef __cplusplus
2323
}

include/umf/providers/provider_os_memory.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ typedef enum umf_os_memory_provider_native_error {
8787
UMF_OS_RESULT_ERROR_PURGE_FORCE_FAILED,
8888
} umf_os_memory_provider_native_error_t;
8989

90-
extern umf_memory_provider_ops_t UMF_OS_MEMORY_PROVIDER_OPS;
90+
umf_memory_provider_ops_t *umfOsMemoryProviderOps(void);
9191

9292
/// @brief Create default params for os memory provider
9393
static inline umf_os_memory_provider_params_t

src/memory_targets/memory_target_numa.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ static enum umf_result_t numa_memory_provider_create_from_memspace(
122122
params.numa_flags = UMF_NUMA_FLAGS_STRICT;
123123

124124
umf_memory_provider_handle_t numaProvider = NULL;
125-
ret = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS, &params,
125+
ret = umfMemoryProviderCreate(umfOsMemoryProviderOps(), &params,
126126
&numaProvider);
127127
free(nodemask);
128128
if (ret) {

src/pool/pool_disjoint.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1069,5 +1069,9 @@ DisjointPool::~DisjointPool() {
10691069
}
10701070
}
10711071

1072-
umf_memory_pool_ops_t UMF_DISJOINT_POOL_OPS =
1072+
static umf_memory_pool_ops_t UMF_DISJOINT_POOL_OPS =
10731073
umf::poolMakeCOps<DisjointPool, umf_disjoint_pool_params_t>();
1074+
1075+
umf_memory_pool_ops_t *umfDisjointPoolOps(void) {
1076+
return &UMF_DISJOINT_POOL_OPS;
1077+
}

src/pool/pool_jemalloc.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ static umf_result_t je_get_last_allocation_error(void *pool) {
416416
return TLS_last_allocation_error;
417417
}
418418

419-
umf_memory_pool_ops_t UMF_JEMALLOC_POOL_OPS = {
419+
static umf_memory_pool_ops_t UMF_JEMALLOC_POOL_OPS = {
420420
.version = UMF_VERSION_CURRENT,
421421
.initialize = je_initialize,
422422
.finalize = je_finalize,
@@ -428,3 +428,7 @@ umf_memory_pool_ops_t UMF_JEMALLOC_POOL_OPS = {
428428
.free = je_free,
429429
.get_last_allocation_error = je_get_last_allocation_error,
430430
};
431+
432+
umf_memory_pool_ops_t *umfJemallocPoolOps(void) {
433+
return &UMF_JEMALLOC_POOL_OPS;
434+
}

src/pool/pool_scalable.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ static umf_result_t tbb_get_last_allocation_error(void *pool) {
262262
return TLS_last_allocation_error;
263263
}
264264

265-
umf_memory_pool_ops_t UMF_SCALABLE_POOL_OPS = {
265+
static umf_memory_pool_ops_t UMF_SCALABLE_POOL_OPS = {
266266
.version = UMF_VERSION_CURRENT,
267267
.initialize = tbb_pool_initialize,
268268
.finalize = tbb_pool_finalize,
@@ -273,3 +273,7 @@ umf_memory_pool_ops_t UMF_SCALABLE_POOL_OPS = {
273273
.malloc_usable_size = tbb_malloc_usable_size,
274274
.free = tbb_free,
275275
.get_last_allocation_error = tbb_get_last_allocation_error};
276+
277+
umf_memory_pool_ops_t *umfScalablePoolOps(void) {
278+
return &UMF_SCALABLE_POOL_OPS;
279+
}

src/provider/provider_os_memory.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ static umf_result_t os_allocation_merge(void *provider, void *lowPtr,
594594
return UMF_RESULT_SUCCESS;
595595
}
596596

597-
umf_memory_provider_ops_t UMF_OS_MEMORY_PROVIDER_OPS = {
597+
static umf_memory_provider_ops_t UMF_OS_MEMORY_PROVIDER_OPS = {
598598
.version = UMF_VERSION_CURRENT,
599599
.initialize = os_initialize,
600600
.finalize = os_finalize,
@@ -608,3 +608,7 @@ umf_memory_provider_ops_t UMF_OS_MEMORY_PROVIDER_OPS = {
608608
.get_name = os_get_name,
609609
.allocation_split = os_allocation_split,
610610
.allocation_merge = os_allocation_merge};
611+
612+
umf_memory_provider_ops_t *umfOsMemoryProviderOps(void) {
613+
return &UMF_OS_MEMORY_PROVIDER_OPS;
614+
}

test/c_api/disjoint_pool.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ void test_disjoint_pool_default_params(void) {
1313
umf_result_t retp;
1414
umf_memory_pool_handle_t pool = NULL;
1515
umf_disjoint_pool_params_t params = umfDisjointPoolParamsDefault();
16-
retp = umfPoolCreate(&UMF_DISJOINT_POOL_OPS, provider, &params, 0, &pool);
16+
retp = umfPoolCreate(umfDisjointPoolOps(), provider, &params, 0, &pool);
1717

1818
UT_ASSERTeq(retp, UMF_RESULT_SUCCESS);
1919

@@ -31,7 +31,7 @@ void test_disjoint_pool_shared_limits(void) {
3131
umfDisjointPoolSharedLimitsCreate(1024);
3232
params.SharedLimits = limits;
3333

34-
retp = umfPoolCreate(&UMF_DISJOINT_POOL_OPS, provider, &params, 0, &pool);
34+
retp = umfPoolCreate(umfDisjointPoolOps(), provider, &params, 0, &pool);
3535

3636
UT_ASSERTeq(retp, UMF_RESULT_SUCCESS);
3737

test/pools/disjoint_pool.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ TEST_F(test, freeErrorPropagation) {
5151
params.MaxPoolableSize = 0;
5252

5353
umf_memory_pool_handle_t pool = NULL;
54-
umf_result_t retp = umfPoolCreate(&UMF_DISJOINT_POOL_OPS, provider_handle,
55-
&params, 0, &pool);
54+
umf_result_t retp =
55+
umfPoolCreate(umfDisjointPoolOps(), provider_handle, &params, 0, &pool);
5656
EXPECT_EQ(retp, UMF_RESULT_SUCCESS);
5757
auto poolHandle = umf_test::wrapPoolUnique(pool);
5858

@@ -112,12 +112,12 @@ TEST_F(test, sharedLimits) {
112112

113113
umf_memory_pool_handle_t pool1 = NULL;
114114
umf_memory_pool_handle_t pool2 = NULL;
115-
auto ret = umfPoolCreate(&UMF_DISJOINT_POOL_OPS, provider.get(),
115+
auto ret = umfPoolCreate(umfDisjointPoolOps(), provider.get(),
116116
(void *)&config, 0, &pool1);
117117
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
118118
auto poolHandle1 = umf_test::wrapPoolUnique(pool1);
119119

120-
ret = umfPoolCreate(&UMF_DISJOINT_POOL_OPS, provider.get(), (void *)&config,
120+
ret = umfPoolCreate(umfDisjointPoolOps(), provider.get(), (void *)&config,
121121
0, &pool2);
122122
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
123123
auto poolHandle2 = umf_test::wrapPoolUnique(pool2);
@@ -151,18 +151,18 @@ TEST_F(test, sharedLimits) {
151151
auto defaultPoolConfig = poolConfig();
152152
INSTANTIATE_TEST_SUITE_P(disjointPoolTests, umfPoolTest,
153153
::testing::Values(poolCreateExtParams{
154-
&UMF_DISJOINT_POOL_OPS, (void *)&defaultPoolConfig,
154+
umfDisjointPoolOps(), (void *)&defaultPoolConfig,
155155
&MALLOC_PROVIDER_OPS, nullptr}));
156156

157157
INSTANTIATE_TEST_SUITE_P(
158158
disjointPoolTests, umfMemTest,
159159
::testing::Values(std::make_tuple(
160-
poolCreateExtParams{&UMF_DISJOINT_POOL_OPS, (void *)&defaultPoolConfig,
160+
poolCreateExtParams{umfDisjointPoolOps(), (void *)&defaultPoolConfig,
161161
&MOCK_OUT_OF_MEM_PROVIDER_OPS,
162162
(void *)&defaultPoolConfig.Capacity},
163163
static_cast<int>(defaultPoolConfig.Capacity) / 2)));
164164

165165
INSTANTIATE_TEST_SUITE_P(disjointMultiPoolTests, umfMultiPoolTest,
166166
::testing::Values(poolCreateExtParams{
167-
&UMF_DISJOINT_POOL_OPS, (void *)&defaultPoolConfig,
167+
umfDisjointPoolOps(), (void *)&defaultPoolConfig,
168168
&MALLOC_PROVIDER_OPS, nullptr}));

test/pools/jemalloc_pool.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ using namespace umf_test;
1414
auto defaultParams = umfOsMemoryProviderParamsDefault();
1515
INSTANTIATE_TEST_SUITE_P(jemallocPoolTest, umfPoolTest,
1616
::testing::Values(poolCreateExtParams{
17-
&UMF_JEMALLOC_POOL_OPS, nullptr,
18-
&UMF_OS_MEMORY_PROVIDER_OPS, &defaultParams}));
17+
umfJemallocPoolOps(), nullptr,
18+
umfOsMemoryProviderOps(), &defaultParams}));
1919

2020
// this test makes sure that jemalloc does not use
2121
// memory provider to allocate metadata (and hence
@@ -30,8 +30,8 @@ TEST_F(test, metadataNotAllocatedUsingProvider) {
3030
auto params = umfOsMemoryProviderParamsDefault();
3131
params.protection = UMF_PROTECTION_NONE;
3232

33-
auto pool = poolCreateExtUnique({&UMF_JEMALLOC_POOL_OPS, nullptr,
34-
&UMF_OS_MEMORY_PROVIDER_OPS, &params});
33+
auto pool = poolCreateExtUnique(
34+
{umfJemallocPoolOps(), nullptr, umfOsMemoryProviderOps(), &params});
3535

3636
std::vector<std::shared_ptr<void>> allocs;
3737
for (size_t i = 0; i < numAllocs; i++) {

test/pools/scalable_pool.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@
1111
auto defaultParams = umfOsMemoryProviderParamsDefault();
1212
INSTANTIATE_TEST_SUITE_P(scalablePoolTest, umfPoolTest,
1313
::testing::Values(poolCreateExtParams{
14-
&UMF_SCALABLE_POOL_OPS, nullptr,
15-
&UMF_OS_MEMORY_PROVIDER_OPS, &defaultParams}));
14+
umfScalablePoolOps(), nullptr,
15+
umfOsMemoryProviderOps(), &defaultParams}));

test/provider_os_memory.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ TEST_F(test, create_WRONG_NUMA_MODE) {
136136
os_memory_provider_params.visibility = UMF_VISIBILITY_SHARED;
137137
os_memory_provider_params.numa_mode = UMF_NUMA_MODE_BIND;
138138

139-
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
139+
umf_result = umfMemoryProviderCreate(umfOsMemoryProviderOps(),
140140
&os_memory_provider_params,
141141
&os_memory_provider);
142142
ASSERT_EQ(umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
@@ -152,7 +152,7 @@ TEST_F(test, create_WRONG_NUMA_FLAGS) {
152152
// wrong NUMA flags
153153
os_memory_provider_params.numa_flags = (unsigned int)-1;
154154

155-
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
155+
umf_result = umfMemoryProviderCreate(umfOsMemoryProviderOps(),
156156
&os_memory_provider_params,
157157
&os_memory_provider);
158158
ASSERT_EQ(umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
@@ -164,7 +164,7 @@ TEST_F(test, create_WRONG_NUMA_FLAGS) {
164164
auto defaultParams = umfOsMemoryProviderParamsDefault();
165165
INSTANTIATE_TEST_SUITE_P(osProviderTest, umfProviderTest,
166166
::testing::Values(providerCreateExtParams{
167-
&UMF_OS_MEMORY_PROVIDER_OPS, &defaultParams}));
167+
umfOsMemoryProviderOps(), &defaultParams}));
168168

169169
TEST_P(umfProviderTest, create_destroy) {}
170170

test/provider_os_memory_config.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct providerConfigTest : testing::Test {
4141
}
4242

4343
void create_provider(umf_os_memory_provider_params_t *params) {
44-
auto res = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS, params,
44+
auto res = umfMemoryProviderCreate(umfOsMemoryProviderOps(), params,
4545
&provider);
4646
ASSERT_EQ(res, UMF_RESULT_SUCCESS);
4747
ASSERT_NE(provider, nullptr);

test/provider_os_memory_multiple_numa_nodes.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ struct testNumaNodes : public testing::TestWithParam<int> {
4545
void
4646
initOsProvider(umf_os_memory_provider_params_t os_memory_provider_params) {
4747
umf_result_t umf_result;
48-
umf_result = umfMemoryProviderCreate(&UMF_OS_MEMORY_PROVIDER_OPS,
48+
umf_result = umfMemoryProviderCreate(umfOsMemoryProviderOps(),
4949
&os_memory_provider_params,
5050
&os_memory_provider);
5151
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

0 commit comments

Comments
 (0)