23
23
24
24
#include <tbb/scalable_allocator.h>
25
25
26
+ #include "base_alloc_global.h"
26
27
#include "utils_common.h"
27
28
#include "utils_sanitizers.h"
28
29
@@ -54,6 +55,9 @@ struct tbb_callbacks {
54
55
struct tbb_memory_pool {
55
56
umf_memory_provider_handle_t mem_provider ;
56
57
void * tbb_pool ;
58
+
59
+ // saved pointer to the global base allocator
60
+ umf_ba_pool_t * base_allocator ;
57
61
};
58
62
59
63
static struct tbb_callbacks g_tbb_ops ;
@@ -146,12 +150,19 @@ static umf_result_t tbb_pool_initialize(umf_memory_provider_handle_t provider,
146
150
return UMF_RESULT_ERROR_UNKNOWN ;
147
151
}
148
152
149
- struct tbb_memory_pool * pool_data = malloc (sizeof (struct tbb_memory_pool ));
153
+ umf_ba_pool_t * base_allocator =
154
+ umf_ba_get_pool (sizeof (struct tbb_memory_pool ));
155
+ if (!base_allocator ) {
156
+ return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
157
+ }
158
+
159
+ struct tbb_memory_pool * pool_data = umf_ba_alloc (base_allocator );
150
160
if (!pool_data ) {
151
161
fprintf (stderr , "cannot allocate memory for metadata\n" );
152
162
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
153
163
}
154
164
165
+ pool_data -> base_allocator = base_allocator ;
155
166
pool_data -> mem_provider = provider ;
156
167
int ret = g_tbb_ops .pool_create_v1 ((intptr_t )pool_data , & policy ,
157
168
& (pool_data -> tbb_pool ));
@@ -168,7 +179,7 @@ static void tbb_pool_finalize(void *pool) {
168
179
pthread_once (& tbb_is_initialized , load_tbb_symbols );
169
180
struct tbb_memory_pool * pool_data = (struct tbb_memory_pool * )pool ;
170
181
g_tbb_ops .pool_destroy (pool_data -> tbb_pool );
171
- free ( pool_data );
182
+ umf_ba_free ( pool_data -> base_allocator , pool_data );
172
183
}
173
184
174
185
static void * tbb_malloc (void * pool , size_t size ) {
0 commit comments