Skip to content

Commit eacd4d1

Browse files
authored
Merge pull request #210 from ldorau/Use_base_allocator_in_the_OS_provider
Use base allocator in the OS provider
2 parents 0e39d40 + cadb3f7 commit eacd4d1

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

src/provider/provider_os_memory.c

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <stdlib.h>
1515
#include <string.h>
1616

17+
#include "base_alloc_global.h"
1718
#include "provider_os_memory_internal.h"
1819
#include <umf.h>
1920
#include <umf/memory_provider_ops.h>
@@ -46,6 +47,9 @@ typedef struct os_memory_provider_t {
4647
int traces; // log level of debug traces
4748

4849
hwloc_topology_t topo;
50+
51+
// saved pointer to the global base allocator
52+
umf_ba_pool_t *base_allocator;
4953
} os_memory_provider_t;
5054

5155
#define TLS_MSG_BUF_LEN 1024
@@ -267,18 +271,27 @@ static umf_result_t os_initialize(void *params, void **provider) {
267271
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
268272
}
269273

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+
270280
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);
272282
if (!os_provider) {
273283
return UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
274284
}
275285

286+
memset(os_provider, 0, sizeof(*os_provider));
287+
os_provider->base_allocator = base_allocator;
288+
276289
int r = hwloc_topology_init(&os_provider->topo);
277290
if (r) {
278291
if (os_provider->traces) {
279292
fprintf(stderr, "HWLOC topology init failed\n");
280293
}
281-
free(os_provider);
294+
umf_ba_free(base_allocator, os_provider);
282295
}
283296

284297
r = hwloc_topology_load(os_provider->topo);
@@ -287,13 +300,13 @@ static umf_result_t os_initialize(void *params, void **provider) {
287300
fprintf(stderr, "HWLOC topology discovery failed\n");
288301
}
289302
hwloc_topology_destroy(os_provider->topo);
290-
free(os_provider);
303+
umf_ba_free(base_allocator, os_provider);
291304
}
292305

293306
ret = translate_params(in_params, os_provider);
294307
if (ret != UMF_RESULT_SUCCESS) {
295308
hwloc_topology_destroy(os_provider->topo);
296-
free(os_provider);
309+
umf_ba_free(base_allocator, os_provider);
297310
return ret;
298311
}
299312

@@ -322,7 +335,7 @@ static void os_finalize(void *provider) {
322335
os_memory_provider_t *os_provider = provider;
323336
hwloc_bitmap_free(os_provider->nodeset);
324337
hwloc_topology_destroy(os_provider->topo);
325-
free(os_provider);
338+
umf_ba_free(os_provider->base_allocator, os_provider);
326339
}
327340

328341
static umf_result_t os_get_min_page_size(void *provider, void *ptr,

0 commit comments

Comments
 (0)