From 7a2f215a5f6cde38167ed858c47072dc0718342d Mon Sep 17 00:00:00 2001 From: Nikita Grigorian Date: Wed, 19 Feb 2025 19:05:34 -0800 Subject: [PATCH] Fix memory leaks in synchronizing kernel calls In synchronizing calls, smart pointers were being released (rather than reset) with no call to free underlying memory, causing USM to leak --- dpctl/tensor/libtensor/source/accumulators.cpp | 8 ++++---- .../source/copy_numpy_ndarray_into_usm_ndarray.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dpctl/tensor/libtensor/source/accumulators.cpp b/dpctl/tensor/libtensor/source/accumulators.cpp index 9ab2b3c659..f1e2d4986b 100644 --- a/dpctl/tensor/libtensor/source/accumulators.cpp +++ b/dpctl/tensor/libtensor/source/accumulators.cpp @@ -210,7 +210,7 @@ std::size_t py_mask_positions(const dpctl::tensor::usm_ndarray &mask, sycl::event::wait(host_task_events); // ensure deleter of smart pointer is invoked with GIL released - shape_strides_owner.release(); + shape_strides_owner.reset(nullptr); } throw std::runtime_error("Unexpected error"); } @@ -231,7 +231,7 @@ std::size_t py_mask_positions(const dpctl::tensor::usm_ndarray &mask, sycl::event::wait(host_task_events); // ensure deleter of smart pointer is invoked with GIL released - shape_strides_owner.release(); + shape_strides_owner.reset(nullptr); } return total_set; @@ -367,7 +367,7 @@ std::size_t py_cumsum_1d(const dpctl::tensor::usm_ndarray &src, sycl::event::wait(host_task_events); // ensure USM deleter is called with GIL released - shape_strides_owner.release(); + shape_strides_owner.reset(nullptr); } throw std::runtime_error("Unexpected error"); } @@ -387,7 +387,7 @@ std::size_t py_cumsum_1d(const dpctl::tensor::usm_ndarray &src, sycl::event::wait(host_task_events); // ensure USM deleter is called with GIL released - shape_strides_owner.release(); + shape_strides_owner.reset(nullptr); } return total; diff --git a/dpctl/tensor/libtensor/source/copy_numpy_ndarray_into_usm_ndarray.cpp b/dpctl/tensor/libtensor/source/copy_numpy_ndarray_into_usm_ndarray.cpp index 9b7894eb4c..6a53ad6cc0 100644 --- a/dpctl/tensor/libtensor/source/copy_numpy_ndarray_into_usm_ndarray.cpp +++ b/dpctl/tensor/libtensor/source/copy_numpy_ndarray_into_usm_ndarray.cpp @@ -325,7 +325,7 @@ void copy_numpy_ndarray_into_usm_ndarray( dst_offset, depends, {copy_shape_ev}); // invoke USM deleter in smart pointer while GIL is held - shape_strides_owner.release(); + shape_strides_owner.reset(nullptr); } return;