Skip to content

Commit c0861fc

Browse files
committed
do not use global ctor/dtor for test params
1 parent 8a04465 commit c0861fc

10 files changed

+185
-134
lines changed

test/memoryPoolAPI.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2023-2024 Intel Corporation
1+
// Copyright (C) 2023-2025 Intel Corporation
22
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44
// This file contains tests for UMF pool API
@@ -295,15 +295,17 @@ TEST_F(tagTest, SetAndGetInvalidPool) {
295295

296296
INSTANTIATE_TEST_SUITE_P(
297297
mallocPoolTest, umfPoolTest,
298-
::testing::Values(poolCreateExtParams{&MALLOC_POOL_OPS, nullptr,
299-
&UMF_NULL_PROVIDER_OPS, nullptr},
300-
poolCreateExtParams{umfProxyPoolOps(), nullptr,
301-
&BA_GLOBAL_PROVIDER_OPS, nullptr}));
298+
::testing::Values(poolCreateExtParams{&MALLOC_POOL_OPS, nullptr, nullptr,
299+
&UMF_NULL_PROVIDER_OPS, nullptr,
300+
nullptr},
301+
poolCreateExtParams{umfProxyPoolOps(), nullptr, nullptr,
302+
&BA_GLOBAL_PROVIDER_OPS, nullptr,
303+
nullptr}));
302304

303305
INSTANTIATE_TEST_SUITE_P(mallocMultiPoolTest, umfMultiPoolTest,
304306
::testing::Values(poolCreateExtParams{
305-
umfProxyPoolOps(), nullptr,
306-
&BA_GLOBAL_PROVIDER_OPS, nullptr}));
307+
umfProxyPoolOps(), nullptr, nullptr,
308+
&BA_GLOBAL_PROVIDER_OPS, nullptr, nullptr}));
307309

308310
INSTANTIATE_TEST_SUITE_P(umfPoolWithCreateFlagsTest, umfPoolWithCreateFlagsTest,
309311
::testing::Values(0,

test/poolFixtures.hpp

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,58 @@
1919

2020
#include "../malloc_compliance_tests.hpp"
2121

22-
using poolCreateExtParams = std::tuple<umf_memory_pool_ops_t *, void *,
23-
umf_memory_provider_ops_t *, void *>;
22+
typedef void *(*pfnPoolParamsCreate)();
23+
typedef umf_result_t (*pfnPoolParamsDestroy)(void *);
24+
25+
typedef void *(*pfnProviderParamsCreate)();
26+
typedef umf_result_t (*pfnProviderParamsDestroy)(void *);
27+
28+
using poolCreateExtParams =
29+
std::tuple<umf_memory_pool_ops_t *, pfnPoolParamsCreate,
30+
pfnPoolParamsDestroy, umf_memory_provider_ops_t *,
31+
pfnProviderParamsCreate, pfnProviderParamsDestroy>;
2432

2533
umf::pool_unique_handle_t poolCreateExtUnique(poolCreateExtParams params) {
26-
auto [pool_ops, pool_params, provider_ops, provider_params] = params;
34+
auto [pool_ops, poolParamsCreate, poolParamsDestroy, provider_ops,
35+
providerParamsCreate, providerParamsDestroy] = params;
2736

2837
umf_memory_provider_handle_t upstream_provider = nullptr;
2938
umf_memory_provider_handle_t provider = nullptr;
3039
umf_memory_pool_handle_t hPool = nullptr;
3140
umf_result_t ret;
3241

42+
void *provider_params = NULL;
43+
if (providerParamsCreate) {
44+
provider_params = providerParamsCreate();
45+
}
3346
ret = umfMemoryProviderCreate(provider_ops, provider_params,
3447
&upstream_provider);
3548
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
3649
EXPECT_NE(upstream_provider, nullptr);
3750

3851
provider = upstream_provider;
3952

53+
void *pool_params = NULL;
54+
if (poolParamsCreate) {
55+
pool_params = poolParamsCreate();
56+
}
57+
58+
// NOTE: we set the UMF_POOL_CREATE_FLAG_OWN_PROVIDER flag here so the pool
59+
// will destroy the provider when it is destroyed
4060
ret = umfPoolCreate(pool_ops, provider, pool_params,
4161
UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &hPool);
4262
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
4363
EXPECT_NE(hPool, nullptr);
4464

65+
// we do not need params anymore
66+
if (poolParamsDestroy) {
67+
poolParamsDestroy(pool_params);
68+
}
69+
70+
if (providerParamsDestroy) {
71+
providerParamsDestroy(provider_params);
72+
}
73+
4574
return umf::pool_unique_handle_t(hPool, &umfPoolDestroy);
4675
}
4776

test/pools/disjoint_pool.cpp

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2023-2024 Intel Corporation
1+
// Copyright (C) 2023-2025 Intel Corporation
22
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

@@ -11,16 +11,12 @@
1111
#include "provider_null.h"
1212
#include "provider_trace.h"
1313

14-
using disjoint_params_unique_handle_t =
15-
std::unique_ptr<umf_disjoint_pool_params_t,
16-
decltype(&umfDisjointPoolParamsDestroy)>;
17-
1814
static constexpr size_t DEFAULT_DISJOINT_SLAB_MIN_SIZE = 4096;
1915
static constexpr size_t DEFAULT_DISJOINT_MAX_POOLABLE_SIZE = 4096;
2016
static constexpr size_t DEFAULT_DISJOINT_CAPACITY = 4;
2117
static constexpr size_t DEFAULT_DISJOINT_MIN_BUCKET_SIZE = 64;
2218

23-
disjoint_params_unique_handle_t poolConfig() {
19+
void *defaultPoolConfig() {
2420
umf_disjoint_pool_params_handle_t config = nullptr;
2521
umf_result_t res = umfDisjointPoolParamsCreate(&config);
2622
if (res != UMF_RESULT_SUCCESS) {
@@ -50,8 +46,7 @@ disjoint_params_unique_handle_t poolConfig() {
5046
throw std::runtime_error("Failed to set min bucket size");
5147
}
5248

53-
return disjoint_params_unique_handle_t(config,
54-
&umfDisjointPoolParamsDestroy);
49+
return config;
5550
}
5651

5752
using umf_test::test;
@@ -83,17 +78,21 @@ TEST_F(test, freeErrorPropagation) {
8378
provider_handle = providerUnique.get();
8479

8580
// force all allocations to go to memory provider
86-
disjoint_params_unique_handle_t params = poolConfig();
87-
umf_result_t retp =
88-
umfDisjointPoolParamsSetMaxPoolableSize(params.get(), 0);
81+
umf_disjoint_pool_params_handle_t params;
82+
umf_result_t retp = umfDisjointPoolParamsCreate(&params);
83+
EXPECT_EQ(retp, UMF_RESULT_SUCCESS);
84+
retp = umfDisjointPoolParamsSetMaxPoolableSize(params, 0);
8985
EXPECT_EQ(retp, UMF_RESULT_SUCCESS);
9086

9187
umf_memory_pool_handle_t pool = NULL;
92-
retp = umfPoolCreate(umfDisjointPoolOps(), provider_handle, params.get(), 0,
93-
&pool);
88+
retp =
89+
umfPoolCreate(umfDisjointPoolOps(), provider_handle, params, 0, &pool);
9490
EXPECT_EQ(retp, UMF_RESULT_SUCCESS);
9591
auto poolHandle = umf_test::wrapPoolUnique(pool);
9692

93+
retp = umfDisjointPoolParamsDestroy(params);
94+
EXPECT_EQ(retp, UMF_RESULT_SUCCESS);
95+
9796
static constexpr size_t size = 1024;
9897
void *ptr = umfPoolMalloc(pool, size);
9998

@@ -114,12 +113,12 @@ TEST_F(test, sharedLimits) {
114113

115114
struct memory_provider : public umf_test::provider_base_t {
116115
umf_result_t alloc(size_t size, size_t, void **ptr) noexcept {
117-
*ptr = malloc(size);
116+
*ptr = umf_ba_global_alloc(size);
118117
numAllocs++;
119118
return UMF_RESULT_SUCCESS;
120119
}
121120
umf_result_t free(void *ptr, [[maybe_unused]] size_t size) noexcept {
122-
::free(ptr);
121+
umf_ba_global_free(ptr);
123122
numFrees++;
124123
return UMF_RESULT_SUCCESS;
125124
}
@@ -130,9 +129,9 @@ TEST_F(test, sharedLimits) {
130129
static constexpr size_t SlabMinSize = 1024;
131130
static constexpr size_t MaxSize = 4 * SlabMinSize;
132131

133-
disjoint_params_unique_handle_t config = poolConfig();
134-
umf_result_t ret =
135-
umfDisjointPoolParamsSetSlabMinSize(config.get(), SlabMinSize);
132+
umf_disjoint_pool_params_handle_t params =
133+
(umf_disjoint_pool_params_handle_t)defaultPoolConfig();
134+
umf_result_t ret = umfDisjointPoolParamsSetSlabMinSize(params, SlabMinSize);
136135
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
137136

138137
auto limits =
@@ -141,24 +140,27 @@ TEST_F(test, sharedLimits) {
141140
umfDisjointPoolSharedLimitsCreate(MaxSize),
142141
&umfDisjointPoolSharedLimitsDestroy);
143142

144-
ret = umfDisjointPoolParamsSetSharedLimits(config.get(), limits.get());
143+
ret = umfDisjointPoolParamsSetSharedLimits(params, limits.get());
145144
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
146145

147146
auto provider =
148147
wrapProviderUnique(createProviderChecked(&provider_ops, nullptr));
149148

150149
umf_memory_pool_handle_t pool1 = NULL;
151150
umf_memory_pool_handle_t pool2 = NULL;
152-
ret = umfPoolCreate(umfDisjointPoolOps(), provider.get(),
153-
(void *)config.get(), 0, &pool1);
151+
ret =
152+
umfPoolCreate(umfDisjointPoolOps(), provider.get(), params, 0, &pool1);
154153
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
155154
auto poolHandle1 = umf_test::wrapPoolUnique(pool1);
156155

157-
ret = umfPoolCreate(umfDisjointPoolOps(), provider.get(),
158-
(void *)config.get(), 0, &pool2);
156+
ret =
157+
umfPoolCreate(umfDisjointPoolOps(), provider.get(), params, 0, &pool2);
159158
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
160159
auto poolHandle2 = umf_test::wrapPoolUnique(pool2);
161160

161+
ret = umfDisjointPoolParamsDestroy(params);
162+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
163+
162164
EXPECT_EQ(0, numAllocs);
163165
EXPECT_EQ(0, numFrees);
164166

@@ -243,23 +245,25 @@ TEST_F(test, disjointPoolInvalidBucketSize) {
243245
umfDisjointPoolParamsDestroy(params);
244246
}
245247

246-
disjoint_params_unique_handle_t defaultPoolConfig = poolConfig();
247248
INSTANTIATE_TEST_SUITE_P(disjointPoolTests, umfPoolTest,
248249
::testing::Values(poolCreateExtParams{
249-
umfDisjointPoolOps(),
250-
(void *)defaultPoolConfig.get(),
251-
&BA_GLOBAL_PROVIDER_OPS, nullptr}));
250+
umfDisjointPoolOps(), defaultPoolConfig,
251+
(pfnPoolParamsDestroy)umfDisjointPoolParamsDestroy,
252+
&BA_GLOBAL_PROVIDER_OPS, nullptr, nullptr}));
253+
254+
void *memProviderParams() { return (void *)&DEFAULT_DISJOINT_CAPACITY; }
252255

253256
INSTANTIATE_TEST_SUITE_P(
254257
disjointPoolTests, umfMemTest,
255258
::testing::Values(std::make_tuple(
256-
poolCreateExtParams{
257-
umfDisjointPoolOps(), (void *)defaultPoolConfig.get(),
258-
&MOCK_OUT_OF_MEM_PROVIDER_OPS, (void *)&DEFAULT_DISJOINT_CAPACITY},
259+
poolCreateExtParams{umfDisjointPoolOps(), defaultPoolConfig,
260+
(pfnPoolParamsDestroy)umfDisjointPoolParamsDestroy,
261+
&MOCK_OUT_OF_MEM_PROVIDER_OPS, memProviderParams,
262+
nullptr},
259263
static_cast<int>(DEFAULT_DISJOINT_CAPACITY) / 2)));
260264

261265
INSTANTIATE_TEST_SUITE_P(disjointMultiPoolTests, umfMultiPoolTest,
262266
::testing::Values(poolCreateExtParams{
263-
umfDisjointPoolOps(),
264-
(void *)defaultPoolConfig.get(),
265-
&BA_GLOBAL_PROVIDER_OPS, nullptr}));
267+
umfDisjointPoolOps(), defaultPoolConfig,
268+
(pfnPoolParamsDestroy)umfDisjointPoolParamsDestroy,
269+
&BA_GLOBAL_PROVIDER_OPS, nullptr, nullptr}));
Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2024 Intel Corporation
1+
// Copyright (C) 2024-2025 Intel Corporation
22
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

@@ -7,18 +7,20 @@
77

88
#include "pool_coarse.hpp"
99

10-
using devdax_params_unique_handle_t =
11-
std::unique_ptr<umf_devdax_memory_provider_params_t,
12-
decltype(&umfDevDaxMemoryProviderParamsDestroy)>;
13-
14-
devdax_params_unique_handle_t create_devdax_params() {
10+
bool devDaxEnvSet() {
1511
char *path = getenv("UMF_TESTS_DEVDAX_PATH");
1612
char *size = getenv("UMF_TESTS_DEVDAX_SIZE");
1713
if (path == nullptr || path[0] == 0 || size == nullptr || size[0] == 0) {
18-
return devdax_params_unique_handle_t(
19-
nullptr, &umfDevDaxMemoryProviderParamsDestroy);
14+
return false;
2015
}
2116

17+
return true;
18+
}
19+
20+
void *createDevDaxParams() {
21+
char *path = getenv("UMF_TESTS_DEVDAX_PATH");
22+
char *size = getenv("UMF_TESTS_DEVDAX_SIZE");
23+
2224
umf_devdax_memory_provider_params_handle_t params = NULL;
2325
umf_result_t res =
2426
umfDevDaxMemoryProviderParamsCreate(&params, path, atol(size));
@@ -27,17 +29,16 @@ devdax_params_unique_handle_t create_devdax_params() {
2729
"Failed to create DevDax Memory Provider params");
2830
}
2931

30-
return devdax_params_unique_handle_t(params,
31-
&umfDevDaxMemoryProviderParamsDestroy);
32+
return params;
3233
}
3334

34-
auto devdaxParams = create_devdax_params();
35-
3635
static std::vector<poolCreateExtParams> poolParamsList =
37-
devdaxParams.get() ? std::vector<poolCreateExtParams>{poolCreateExtParams{
38-
umfJemallocPoolOps(), nullptr,
39-
umfDevDaxMemoryProviderOps(), devdaxParams.get()}}
40-
: std::vector<poolCreateExtParams>{};
36+
devDaxEnvSet()
37+
? std::vector<poolCreateExtParams>{poolCreateExtParams{
38+
umfJemallocPoolOps(), nullptr, nullptr,
39+
umfDevDaxMemoryProviderOps(), createDevDaxParams,
40+
(pfnProviderParamsDestroy)umfDevDaxMemoryProviderParamsDestroy}}
41+
: std::vector<poolCreateExtParams>{};
4142

4243
INSTANTIATE_TEST_SUITE_P(jemallocCoarseDevDaxTest, umfPoolTest,
4344
::testing::ValuesIn(poolParamsList));
Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2024 Intel Corporation
1+
// Copyright (C) 2024-2025 Intel Corporation
22
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

@@ -7,25 +7,21 @@
77

88
#include "pool_coarse.hpp"
99

10-
using file_params_unique_handle_t =
11-
std::unique_ptr<umf_file_memory_provider_params_t,
12-
decltype(&umfFileMemoryProviderParamsDestroy)>;
13-
14-
file_params_unique_handle_t get_file_params_default(char *path) {
10+
void *getFileParamsDefault() {
1511
umf_file_memory_provider_params_handle_t file_params = NULL;
16-
umf_result_t res = umfFileMemoryProviderParamsCreate(&file_params, path);
12+
umf_result_t res =
13+
umfFileMemoryProviderParamsCreate(&file_params, FILE_PATH);
1714
if (res != UMF_RESULT_SUCCESS) {
1815
throw std::runtime_error(
1916
"Failed to create File Memory Provider params");
2017
}
2118

22-
return file_params_unique_handle_t(file_params,
23-
&umfFileMemoryProviderParamsDestroy);
19+
return file_params;
2420
}
2521

26-
file_params_unique_handle_t fileParams = get_file_params_default(FILE_PATH);
27-
28-
INSTANTIATE_TEST_SUITE_P(jemallocCoarseFileTest, umfPoolTest,
29-
::testing::Values(poolCreateExtParams{
30-
umfJemallocPoolOps(), nullptr,
31-
umfFileMemoryProviderOps(), fileParams.get()}));
22+
INSTANTIATE_TEST_SUITE_P(
23+
jemallocCoarseFileTest, umfPoolTest,
24+
::testing::Values(poolCreateExtParams{
25+
umfJemallocPoolOps(), nullptr, nullptr, umfFileMemoryProviderOps(),
26+
getFileParamsDefault,
27+
(pfnProviderParamsDestroy)umfFileMemoryProviderParamsDestroy}));

0 commit comments

Comments
 (0)