Skip to content

Commit 471f9bf

Browse files
authored
Merge pull request #1356 from lplewa/unify
unify return values for destroy functions
2 parents f633a0e + cffbeb2 commit 471f9bf

35 files changed

+223
-92
lines changed

examples/custom_file_provider/custom_file_provider.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,12 @@ static umf_result_t file_init(const void *params, void **provider) {
104104
}
105105

106106
// Function to deinitialize the file provider
107-
static void file_deinit(void *provider) {
107+
static umf_result_t file_deinit(void *provider) {
108108
file_provider_t *file_provider = (file_provider_t *)provider;
109109
munmap(file_provider->ptr, ADDRESS_RESERVATION);
110110
close(file_provider->fd);
111111
free(file_provider);
112+
return UMF_RESULT_SUCCESS;
112113
}
113114

114115
// Function to allocate memory from the file provider

include/umf/memory_pool.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,9 @@ umf_result_t umfPoolCreate(const umf_memory_pool_ops_t *ops,
5858
///
5959
/// @brief Destroys memory pool.
6060
/// @param hPool handle to the pool
61+
/// @return UMF_RESULT_SUCCESS on success or appropriate error code on failure.
6162
///
62-
void umfPoolDestroy(umf_memory_pool_handle_t hPool);
63+
umf_result_t umfPoolDestroy(umf_memory_pool_handle_t hPool);
6364

6465
///
6566
/// @brief Allocates \p size bytes of uninitialized storage from \p hPool

include/umf/memory_pool_ops.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ typedef struct umf_memory_pool_ops_t {
4747
///
4848
/// @brief Finalizes memory pool
4949
/// @param pool pool to finalize
50+
/// @return UMF_RESULT_SUCCESS on success or appropriate error code on failure.
5051
///
51-
void (*finalize)(void *pool);
52+
umf_result_t (*finalize)(void *pool);
5253

5354
///
5455
/// @brief Allocates \p size bytes of uninitialized storage from \p pool

include/umf/memory_provider.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ umf_result_t umfMemoryProviderCreate(const umf_memory_provider_ops_t *ops,
5151
///
5252
/// @brief Destroys memory provider.
5353
/// @param hProvider handle to the memory provider
54+
/// @return UMF_RESULT_SUCCESS on success or appropriate error code on failure.
5455
///
55-
void umfMemoryProviderDestroy(umf_memory_provider_handle_t hProvider);
56+
umf_result_t umfMemoryProviderDestroy(umf_memory_provider_handle_t hProvider);
5657

5758
///
5859
/// @brief Allocates \p size bytes of uninitialized storage from memory \p hProvider

include/umf/memory_provider_ops.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,9 @@ typedef struct umf_memory_provider_ops_t {
4242
///
4343
/// @brief Finalizes memory provider.
4444
/// @param provider provider to finalize
45+
/// @return UMF_RESULT_SUCCESS on success or appropriate error code on failure.
4546
///
46-
void (*finalize)(void *provider);
47+
umf_result_t (*finalize)(void *provider);
4748

4849
///
4950
/// @brief Allocates \p size bytes of uninitialized storage from memory \p provider

include/umf/memspace.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
*
3-
* Copyright (C) 2023-2024 Intel Corporation
3+
* Copyright (C) 2023-2025 Intel Corporation
44
*
55
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
66
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
@@ -58,8 +58,9 @@ umf_result_t umfMemspaceCreateFromNumaArray(unsigned *nodeIds, size_t numIds,
5858
///
5959
/// \brief Destroys memspace
6060
/// \param hMemspace handle to memspace
61+
/// \return UMF_RESULT_SUCCESS on success or appropriate error code on failure.
6162
///
62-
void umfMemspaceDestroy(umf_memspace_handle_t hMemspace);
63+
umf_result_t umfMemspaceDestroy(umf_memspace_handle_t hMemspace);
6364

6465
///
6566
/// \brief Retrieves predefined host all memspace.

include/umf/pools/pool_disjoint.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ umfDisjointPoolSharedLimitsCreate(size_t MaxSize);
3535

3636
/// @brief Destroy previously created pool limits struct.
3737
/// @param hSharedLimits handle to the shared limits struct.
38-
void umfDisjointPoolSharedLimitsDestroy(
38+
/// @return UMF_RESULT_SUCCESS on success or appropriate error code on failure.
39+
umf_result_t umfDisjointPoolSharedLimitsDestroy(
3940
umf_disjoint_pool_shared_limits_handle_t hSharedLimits);
4041

4142
/// @brief Create a struct to store parameters of disjoint pool.

src/memory_pool.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,24 +239,30 @@ static umf_result_t umfPoolCreateInternal(const umf_memory_pool_ops_t *ops,
239239
return ret;
240240
}
241241

242-
void umfPoolDestroy(umf_memory_pool_handle_t hPool) {
242+
umf_result_t umfPoolDestroy(umf_memory_pool_handle_t hPool) {
243243
if (umf_ba_global_is_destroyed()) {
244-
return;
244+
return UMF_RESULT_ERROR_UNKNOWN;
245245
}
246246

247-
hPool->ops.finalize(hPool->pool_priv);
247+
umf_result_t ret = hPool->ops.finalize(hPool->pool_priv);
248248

249249
umf_memory_provider_handle_t hUpstreamProvider = NULL;
250250
umfPoolGetMemoryProvider(hPool, &hUpstreamProvider);
251251

252252
if (!(hPool->flags & UMF_POOL_CREATE_FLAG_DISABLE_TRACKING)) {
253253
// Destroy tracking provider.
254-
umfMemoryProviderDestroy(hPool->provider);
254+
umf_result_t ret2 = umfMemoryProviderDestroy(hPool->provider);
255+
if (ret == UMF_RESULT_SUCCESS) {
256+
ret = ret2;
257+
}
255258
}
256259

257260
if (hPool->flags & UMF_POOL_CREATE_FLAG_OWN_PROVIDER) {
258261
// Destroy associated memory provider.
259-
umfMemoryProviderDestroy(hUpstreamProvider);
262+
umf_result_t ret2 = umfMemoryProviderDestroy(hUpstreamProvider);
263+
if (ret == UMF_RESULT_SUCCESS) {
264+
ret = ret2;
265+
}
260266
}
261267

262268
utils_mutex_destroy_not_free(&hPool->lock);
@@ -265,6 +271,7 @@ void umfPoolDestroy(umf_memory_pool_handle_t hPool) {
265271

266272
// TODO: this free keeps memory in base allocator, so it can lead to OOM in some scenarios (it should be optimized)
267273
umf_ba_global_free(hPool);
274+
return ret;
268275
}
269276

270277
umf_result_t umfFree(void *ptr) {

src/memory_provider.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,18 @@ umf_result_t umfMemoryProviderCreate(const umf_memory_provider_ops_t *ops,
235235
return UMF_RESULT_SUCCESS;
236236
}
237237

238-
void umfMemoryProviderDestroy(umf_memory_provider_handle_t hProvider) {
239-
if (hProvider && !umf_ba_global_is_destroyed()) {
240-
hProvider->ops.finalize(hProvider->provider_priv);
241-
umf_ba_global_free(hProvider);
238+
umf_result_t umfMemoryProviderDestroy(umf_memory_provider_handle_t hProvider) {
239+
if (umf_ba_global_is_destroyed()) {
240+
return UMF_RESULT_ERROR_UNKNOWN;
242241
}
242+
243+
if (!hProvider) {
244+
return UMF_RESULT_SUCCESS;
245+
}
246+
247+
umf_result_t ret = hProvider->ops.finalize(hProvider->provider_priv);
248+
umf_ba_global_free(hProvider);
249+
return ret;
243250
}
244251

245252
static void

src/memspace.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
*
3-
* Copyright (C) 2023-2024 Intel Corporation
3+
* Copyright (C) 2023-2025 Intel Corporation
44
*
55
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
66
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
@@ -130,14 +130,15 @@ umf_result_t umfMemspaceNew(umf_memspace_handle_t *hMemspace) {
130130
return UMF_RESULT_SUCCESS;
131131
}
132132

133-
void umfMemspaceDestroy(umf_memspace_handle_t memspace) {
133+
umf_result_t umfMemspaceDestroy(umf_memspace_handle_t memspace) {
134134
assert(memspace);
135135
for (size_t i = 0; i < memspace->size; i++) {
136136
umfMemtargetDestroy(memspace->nodes[i]);
137137
}
138138

139139
umf_ba_global_free(memspace->nodes);
140140
umf_ba_global_free(memspace);
141+
return UMF_RESULT_SUCCESS;
141142
}
142143

143144
umf_result_t umfMemspaceClone(umf_const_memspace_handle_t hMemspace,

0 commit comments

Comments
 (0)