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-
1814static constexpr size_t DEFAULT_DISJOINT_SLAB_MIN_SIZE = 4096 ;
1915static constexpr size_t DEFAULT_DISJOINT_MAX_POOLABLE_SIZE = 4096 ;
2016static constexpr size_t DEFAULT_DISJOINT_CAPACITY = 4 ;
2117static 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,12 @@ 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;
50+ }
51+
52+ umf_result_t poolConfigDestroy (void *config) {
53+ return umfDisjointPoolParamsDestroy (
54+ static_cast <umf_disjoint_pool_params_handle_t >(config));
5555}
5656
5757using umf_test::test;
@@ -83,17 +83,21 @@ TEST_F(test, freeErrorPropagation) {
8383 provider_handle = providerUnique.get ();
8484
8585 // 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 );
86+ umf_disjoint_pool_params_handle_t params;
87+ umf_result_t retp = umfDisjointPoolParamsCreate (¶ms);
88+ EXPECT_EQ (retp, UMF_RESULT_SUCCESS);
89+ retp = umfDisjointPoolParamsSetMaxPoolableSize (params, 0 );
8990 EXPECT_EQ (retp, UMF_RESULT_SUCCESS);
9091
9192 umf_memory_pool_handle_t pool = NULL ;
92- retp = umfPoolCreate ( umfDisjointPoolOps (), provider_handle, params. get (), 0 ,
93- &pool);
93+ retp =
94+ umfPoolCreate ( umfDisjointPoolOps (), provider_handle, params, 0 , &pool);
9495 EXPECT_EQ (retp, UMF_RESULT_SUCCESS);
9596 auto poolHandle = umf_test::wrapPoolUnique (pool);
9697
98+ retp = umfDisjointPoolParamsDestroy (params);
99+ EXPECT_EQ (retp, UMF_RESULT_SUCCESS);
100+
97101 static constexpr size_t size = 1024 ;
98102 void *ptr = umfPoolMalloc (pool, size);
99103
@@ -130,9 +134,9 @@ TEST_F(test, sharedLimits) {
130134 static constexpr size_t SlabMinSize = 1024 ;
131135 static constexpr size_t MaxSize = 4 * SlabMinSize;
132136
133- disjoint_params_unique_handle_t config = poolConfig ();
134- umf_result_t ret =
135- umfDisjointPoolParamsSetSlabMinSize (config. get () , SlabMinSize);
137+ umf_disjoint_pool_params_handle_t params =
138+ ( umf_disjoint_pool_params_handle_t ) defaultPoolConfig ();
139+ umf_result_t ret = umfDisjointPoolParamsSetSlabMinSize (params , SlabMinSize);
136140 EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
137141
138142 auto limits =
@@ -141,24 +145,27 @@ TEST_F(test, sharedLimits) {
141145 umfDisjointPoolSharedLimitsCreate (MaxSize),
142146 &umfDisjointPoolSharedLimitsDestroy);
143147
144- ret = umfDisjointPoolParamsSetSharedLimits (config. get () , limits.get ());
148+ ret = umfDisjointPoolParamsSetSharedLimits (params , limits.get ());
145149 EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
146150
147151 auto provider =
148152 wrapProviderUnique (createProviderChecked (&provider_ops, nullptr ));
149153
150154 umf_memory_pool_handle_t pool1 = NULL ;
151155 umf_memory_pool_handle_t pool2 = NULL ;
152- ret = umfPoolCreate ( umfDisjointPoolOps (), provider. get (),
153- ( void *)config .get (), 0 , &pool1);
156+ ret =
157+ umfPoolCreate ( umfDisjointPoolOps (), provider .get (), params , 0 , &pool1);
154158 EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
155159 auto poolHandle1 = umf_test::wrapPoolUnique (pool1);
156160
157- ret = umfPoolCreate ( umfDisjointPoolOps (), provider. get (),
158- ( void *)config .get (), 0 , &pool2);
161+ ret =
162+ umfPoolCreate ( umfDisjointPoolOps (), provider .get (), params , 0 , &pool2);
159163 EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
160164 auto poolHandle2 = umf_test::wrapPoolUnique (pool2);
161165
166+ ret = umfDisjointPoolParamsDestroy (params);
167+ EXPECT_EQ (ret, UMF_RESULT_SUCCESS);
168+
162169 EXPECT_EQ (0 , numAllocs);
163170 EXPECT_EQ (0 , numFrees);
164171
@@ -243,23 +250,24 @@ TEST_F(test, disjointPoolInvalidBucketSize) {
243250 umfDisjointPoolParamsDestroy (params);
244251}
245252
246- disjoint_params_unique_handle_t defaultPoolConfig = poolConfig();
247253INSTANTIATE_TEST_SUITE_P (disjointPoolTests, umfPoolTest,
248254 ::testing::Values (poolCreateExtParams{
249- umfDisjointPoolOps (),
250- (void *)defaultPoolConfig.get (),
251- &BA_GLOBAL_PROVIDER_OPS, nullptr }));
255+ umfDisjointPoolOps (), defaultPoolConfig,
256+ poolConfigDestroy, &BA_GLOBAL_PROVIDER_OPS,
257+ nullptr , nullptr }));
258+
259+ void *memProviderParams () { return (void *)&DEFAULT_DISJOINT_CAPACITY; }
252260
253261INSTANTIATE_TEST_SUITE_P (
254262 disjointPoolTests, umfMemTest,
255263 ::testing::Values (std::make_tuple(
256- poolCreateExtParams{
257- umfDisjointPoolOps (), ( void *)defaultPoolConfig. get () ,
258- &MOCK_OUT_OF_MEM_PROVIDER_OPS, ( void *)&DEFAULT_DISJOINT_CAPACITY },
264+ poolCreateExtParams{umfDisjointPoolOps (), defaultPoolConfig,
265+ poolConfigDestroy, &MOCK_OUT_OF_MEM_PROVIDER_OPS ,
266+ memProviderParams, nullptr },
259267 static_cast <int >(DEFAULT_DISJOINT_CAPACITY) / 2)));
260268
261269INSTANTIATE_TEST_SUITE_P (disjointMultiPoolTests, umfMultiPoolTest,
262270 ::testing::Values (poolCreateExtParams{
263- umfDisjointPoolOps (),
264- ( void *)defaultPoolConfig. get () ,
265- &BA_GLOBAL_PROVIDER_OPS , nullptr }));
271+ umfDisjointPoolOps (), defaultPoolConfig,
272+ poolConfigDestroy, &BA_GLOBAL_PROVIDER_OPS ,
273+ nullptr , nullptr }));
0 commit comments