14
14
#include <stdlib.h>
15
15
#include <string.h>
16
16
17
+ #include "base_alloc_global.h"
17
18
#include "provider_os_memory_internal.h"
18
19
#include <umf.h>
19
20
#include <umf/memory_provider_ops.h>
@@ -46,6 +47,9 @@ typedef struct os_memory_provider_t {
46
47
int traces ; // log level of debug traces
47
48
48
49
hwloc_topology_t topo ;
50
+
51
+ // saved pointer to the global base allocator
52
+ umf_ba_pool_t * base_allocator ;
49
53
} os_memory_provider_t ;
50
54
51
55
#define TLS_MSG_BUF_LEN 1024
@@ -267,18 +271,27 @@ static umf_result_t os_initialize(void *params, void **provider) {
267
271
return UMF_RESULT_ERROR_INVALID_ARGUMENT ;
268
272
}
269
273
274
+ umf_ba_pool_t * base_allocator =
275
+ umf_ba_get_pool (sizeof (os_memory_provider_t ));
276
+ if (!base_allocator ) {
277
+ return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
278
+ }
279
+
270
280
os_memory_provider_t * os_provider =
271
- (os_memory_provider_t * )calloc ( 1 , sizeof ( os_memory_provider_t ) );
281
+ (os_memory_provider_t * )umf_ba_alloc ( base_allocator );
272
282
if (!os_provider ) {
273
283
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY ;
274
284
}
275
285
286
+ memset (os_provider , 0 , sizeof (* os_provider ));
287
+ os_provider -> base_allocator = base_allocator ;
288
+
276
289
int r = hwloc_topology_init (& os_provider -> topo );
277
290
if (r ) {
278
291
if (os_provider -> traces ) {
279
292
fprintf (stderr , "HWLOC topology init failed\n" );
280
293
}
281
- free ( os_provider );
294
+ umf_ba_free ( base_allocator , os_provider );
282
295
}
283
296
284
297
r = hwloc_topology_load (os_provider -> topo );
@@ -287,13 +300,13 @@ static umf_result_t os_initialize(void *params, void **provider) {
287
300
fprintf (stderr , "HWLOC topology discovery failed\n" );
288
301
}
289
302
hwloc_topology_destroy (os_provider -> topo );
290
- free ( os_provider );
303
+ umf_ba_free ( base_allocator , os_provider );
291
304
}
292
305
293
306
ret = translate_params (in_params , os_provider );
294
307
if (ret != UMF_RESULT_SUCCESS ) {
295
308
hwloc_topology_destroy (os_provider -> topo );
296
- free ( os_provider );
309
+ umf_ba_free ( base_allocator , os_provider );
297
310
return ret ;
298
311
}
299
312
@@ -322,7 +335,7 @@ static void os_finalize(void *provider) {
322
335
os_memory_provider_t * os_provider = provider ;
323
336
hwloc_bitmap_free (os_provider -> nodeset );
324
337
hwloc_topology_destroy (os_provider -> topo );
325
- free ( os_provider );
338
+ umf_ba_free ( os_provider -> base_allocator , os_provider );
326
339
}
327
340
328
341
static umf_result_t os_get_min_page_size (void * provider , void * ptr ,
0 commit comments