Skip to content

Commit 04aa67b

Browse files
committed
clone memspace nodes before removal
1 parent 2ec69c0 commit 04aa67b

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

src/memspace.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
*
3-
* Copyright (C) 2023-2025 Intel Corporation
3+
* Copyright (C) 2023-2026 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
@@ -455,7 +455,11 @@ static int umfMemspaceFilterHelper(umf_memspace_handle_t memspace,
455455
LOG_ERR("filter function failed");
456456
goto free_mem;
457457
} else if (ret == 0) {
458-
nodesToRemove[idx++] = memspace->nodes[i];
458+
ret = umfMemtargetClone(memspace->nodes[i], &nodesToRemove[idx]);
459+
if (ret != UMF_RESULT_SUCCESS) {
460+
goto free_mem;
461+
}
462+
idx++;
459463
}
460464
}
461465

@@ -467,8 +471,8 @@ static int umfMemspaceFilterHelper(umf_memspace_handle_t memspace,
467471
}
468472
}
469473

470-
umf_ba_global_free(nodesToRemove);
471-
return UMF_RESULT_SUCCESS;
474+
ret = UMF_RESULT_SUCCESS;
475+
goto free_mem;
472476

473477
re_add:
474478
// If target removal failed, add back previously removed targets.
@@ -481,6 +485,9 @@ static int umfMemspaceFilterHelper(umf_memspace_handle_t memspace,
481485
}
482486
}
483487
free_mem:
488+
for (size_t j = 0; j < idx; j++) {
489+
umfMemtargetDestroy(nodesToRemove[j]);
490+
}
484491
umf_ba_global_free(nodesToRemove);
485492
return ret;
486493
}

0 commit comments

Comments
 (0)