aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSang-Hoon Park <sang-hoon.park@arm.com>2020-09-24 12:55:29 +0100
committerSang-Hoon Park <sang-hoon.park@arm.com>2020-09-30 10:39:38 +0000
commitde2e747de0a63933d0cfcb75739d9460ea7c2ff5 (patch)
tree241e89d8927f15ac64dcab598b9f79a9df89b2ed
parent14e868e0fbb22622d70aa5529818ee4737c4a863 (diff)
downloadComputeLibrary-de2e747de0a63933d0cfcb75739d9460ea7c2ff5.tar.gz
COMPMID-3782: Delay initialization of Scheduler
To fix the deadlock in multi-process use-case, Scheduler object is initialized when it is actually referenced using get() method for the first time instead of the beginning of the program. Change-Id: Ib2dd47795011cf6137b1454c78d91736deb80a8b Signed-off-by: Sang-Hoon Park <sang-hoon.park@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4052 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Giuseppe Rossini <giuseppe.rossini@arm.com> Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
-rw-r--r--src/runtime/Scheduler.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/runtime/Scheduler.cpp b/src/runtime/Scheduler.cpp
index 4063cc1c00..5b3010b173 100644
--- a/src/runtime/Scheduler.cpp
+++ b/src/runtime/Scheduler.cpp
@@ -67,7 +67,7 @@ std::map<Scheduler::Type, std::unique_ptr<IScheduler>> init()
}
} // namespace
-std::map<Scheduler::Type, std::unique_ptr<IScheduler>> Scheduler::_schedulers = init();
+std::map<Scheduler::Type, std::unique_ptr<IScheduler>> Scheduler::_schedulers{};
void Scheduler::set(Type t)
{
@@ -107,6 +107,11 @@ IScheduler &Scheduler::get()
}
else
{
+ if(_schedulers.empty())
+ {
+ _schedulers = init();
+ }
+
auto it = _schedulers.find(_scheduler_type);
if(it != _schedulers.end())
{