IVGCVSW-5078 Fix segmentation fault on Yolo V3 Big App
* Register TensorHandleFactories when create Workload Factory
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I6217c6f00d27b67e42b8043cbaf72d9db5789bfb
diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp
index b35dfd1..0dd75aa 100644
--- a/src/armnn/LoadedNetwork.cpp
+++ b/src/armnn/LoadedNetwork.cpp
@@ -121,6 +121,7 @@
m_OptimizedNetwork(std::move(net)),
m_IsImportEnabled(networkProperties.m_ImportEnabled),
m_IsExportEnabled(networkProperties.m_ExportEnabled),
+ m_TensorHandleFactoryRegistry(),
m_ProfilingService(profilingService)
{
// Create a profiler and register it for the current thread.
@@ -144,8 +145,6 @@
if (backend->SupportsTensorAllocatorAPI())
{
- backend->RegisterTensorHandleFactories(m_TensorHandleFactoryRegistry);
-
auto workloadFactory = backend->CreateWorkloadFactory(m_TensorHandleFactoryRegistry);
m_WorkloadFactories.emplace(
std::make_pair(backendId, std::make_pair(std::move(workloadFactory), nullptr)));
diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp
index 0a898ec..f9a8993 100644
--- a/src/backends/cl/ClBackend.cpp
+++ b/src/backends/cl/ClBackend.cpp
@@ -50,6 +50,7 @@
auto memoryManager = std::make_shared<ClMemoryManager>(std::make_unique<arm_compute::CLBufferAllocator>());
registry.RegisterMemoryManager(memoryManager);
+ registry.RegisterFactory(std::make_unique<ClTensorHandleFactory>(memoryManager));
return std::make_unique<ClWorkloadFactory>(
PolymorphicPointerDowncast<ClMemoryManager>(memoryManager));
diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp
index 841ed27..01cc6d8 100644
--- a/src/backends/neon/NeonBackend.cpp
+++ b/src/backends/neon/NeonBackend.cpp
@@ -53,6 +53,8 @@
BaseMemoryManager::MemoryAffinity::Offset);
tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
+ tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<NeonTensorHandleFactory>(memoryManager));
+
return std::make_unique<NeonWorkloadFactory>(
PolymorphicPointerDowncast<NeonMemoryManager>(memoryManager));
}
diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp
index 590fde3..e93b317 100644
--- a/src/backends/reference/RefBackend.cpp
+++ b/src/backends/reference/RefBackend.cpp
@@ -37,6 +37,7 @@
auto memoryManager = std::make_shared<RefMemoryManager>();
tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
+ tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<RefTensorHandleFactory>(memoryManager));
return std::make_unique<RefWorkloadFactory>(PolymorphicPointerDowncast<RefMemoryManager>(memoryManager));
}