aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColm Donelan <colm.donelan@arm.com>2022-12-21 15:33:39 +0000
committerColm Donelan <colm.donelan@arm.com>2023-01-05 11:57:23 +0000
commit7000d679b5e5ea1df64a25fbe8e97ec23b95aff6 (patch)
treee3c5c7ce8dd27d55c4551fcbfe3c0f35110222ee
parent0506ef0a099f5ba564af5e110e6857a68f462080 (diff)
downloadarmnn-7000d679b5e5ea1df64a25fbe8e97ec23b95aff6.tar.gz
Deregistering custom allocators in RuntimeImpl destructor.
Signed-off-by: Colm Donelan <colm.donelan@arm.com> Change-Id: Ib148daf81700d9038d6e91a35c9c17e770c26e84
-rw-r--r--src/armnn/Runtime.cpp10
-rw-r--r--src/armnn/Runtime.hpp6
2 files changed, 14 insertions, 2 deletions
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index 75b1ee8179..cec54f4ec8 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017, 2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -393,6 +393,7 @@ RuntimeImpl::RuntimeImpl(const IRuntime::CreationOptions& options)
}
// No errors so register the Custom Allocator with the BackendRegistry
BackendRegistryInstance().RegisterAllocator(id, customAllocatorMapIterator->second);
+ m_AllocatorsAddedByThisRuntime.emplace(id);
}
else
{
@@ -428,6 +429,7 @@ RuntimeImpl::RuntimeImpl(const IRuntime::CreationOptions& options)
}
// No errors so register the Custom Allocator with the BackendRegistry
BackendRegistryInstance().RegisterAllocator(id, customAllocatorMapIterator->second);
+ m_AllocatorsAddedByThisRuntime.emplace(id);
}
}
@@ -584,6 +586,12 @@ RuntimeImpl::~RuntimeImpl()
m_BackendContexts.clear();
BackendRegistryInstance().SetProfilingService(armnn::EmptyOptional());
+ // Remove custom allocators that this runtime has added.
+ // Note: that as backends can be per process and there can be many instances of a runtime in a process an allocator
+ // may have been overwritten by another runtime.
+ for_each(m_AllocatorsAddedByThisRuntime.begin(), m_AllocatorsAddedByThisRuntime.end(),
+ [](BackendId id) {BackendRegistryInstance().DeregisterAllocator(id);});
+
ARMNN_LOG(info) << "Shutdown time: " << std::setprecision(2)
<< std::fixed << armnn::GetTimeDuration(startTime).count() << " ms.";
}
diff --git a/src/armnn/Runtime.hpp b/src/armnn/Runtime.hpp
index f5dfadf948..9d47b7898d 100644
--- a/src/armnn/Runtime.hpp
+++ b/src/armnn/Runtime.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2017, 2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
@@ -157,6 +157,10 @@ private:
/// Profiling Service Instance
std::unique_ptr<arm::pipe::IProfilingService> m_ProfilingService;
+
+ /// Keep track of backend ids of the custom allocators that this instance of the runtime added. The
+ /// destructor can then clean up for this runtime.
+ std::set<BackendId> m_AllocatorsAddedByThisRuntime;
};
} // namespace armnn