diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/reference/RefTensorHandle.cpp | 11 | ||||
-rw-r--r-- | src/backends/reference/test/RefTensorHandleTests.cpp | 6 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/backends/reference/RefTensorHandle.cpp b/src/backends/reference/RefTensorHandle.cpp index 59ccec6bac..42ac7f0826 100644 --- a/src/backends/reference/RefTensorHandle.cpp +++ b/src/backends/reference/RefTensorHandle.cpp @@ -35,7 +35,10 @@ RefTensorHandle::~RefTensorHandle() if (!m_Pool) { // unmanaged - ::operator delete(m_UnmanagedMemory); + if (!m_Imported) + { + ::operator delete(m_UnmanagedMemory); + } } } @@ -110,6 +113,12 @@ bool RefTensorHandle::Import(void* memory, MemorySource source) // Checks the 16 byte memory alignment. if (reinterpret_cast<uint64_t>(memory) % 16) { + if (m_Imported) + { + m_Imported = false; + m_UnmanagedMemory = nullptr; + } + return false; } diff --git a/src/backends/reference/test/RefTensorHandleTests.cpp b/src/backends/reference/test/RefTensorHandleTests.cpp index 8de03cf043..2c5d6d49ec 100644 --- a/src/backends/reference/test/RefTensorHandleTests.cpp +++ b/src/backends/reference/test/RefTensorHandleTests.cpp @@ -54,7 +54,6 @@ BOOST_AUTO_TEST_CASE(CheckSourceType) TensorInfo info({1}, DataType::Float32); RefTensorHandle handle(info, memoryManager, static_cast<unsigned int>(MemorySource::Malloc)); - // This pointer will be deleted in the handle destructor int* testPtr = new int(4); // Not supported @@ -65,6 +64,8 @@ BOOST_AUTO_TEST_CASE(CheckSourceType) // Supported BOOST_CHECK(handle.Import(static_cast<void *>(testPtr), MemorySource::Malloc)); + + delete testPtr; } BOOST_AUTO_TEST_CASE(ReusePointer) @@ -74,13 +75,14 @@ BOOST_AUTO_TEST_CASE(ReusePointer) TensorInfo info({1}, DataType::Float32); RefTensorHandle handle(info, memoryManager, static_cast<unsigned int>(MemorySource::Malloc)); - // This pointer will be deleted in the handle destructor int* testPtr = new int(4); handle.Import(static_cast<void *>(testPtr), MemorySource::Malloc); // Reusing previously Imported pointer BOOST_CHECK(handle.Import(static_cast<void *>(testPtr), MemorySource::Malloc)); + + delete testPtr; } BOOST_AUTO_TEST_CASE(MisalignedPointer) |