From 1fd21c109e2492678a6f7169b7d33e29245f5160 Mon Sep 17 00:00:00 2001 From: Tiago Koji Castro Shibata Date: Sat, 4 Apr 2020 20:10:07 -0700 Subject: [PATCH] Fix race condition creating ConverterResourceStore (#3419) --- winml/lib/Api/LearningModelDevice.cpp | 8 ++------ winml/lib/Api/LearningModelDevice.h | 2 ++ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/winml/lib/Api/LearningModelDevice.cpp b/winml/lib/Api/LearningModelDevice.cpp index ef0bf8e430..011ca06fdf 100644 --- a/winml/lib/Api/LearningModelDevice.cpp +++ b/winml/lib/Api/LearningModelDevice.cpp @@ -53,16 +53,12 @@ Windows::AI::MachineLearning::LearningModelDevice LearningModelDevice::CreateFro WINML_CATCH_ALL std::shared_ptr<::Windows::AI::MachineLearning::ConverterResourceStore> LearningModelDevice::TensorizerStore() { - if (m_tensorizerStore == nullptr) { - m_tensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); - } + std::call_once(m_tensorizerStoreInitialized, [this](){ m_tensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); }); return m_tensorizerStore; } std::shared_ptr<::Windows::AI::MachineLearning::ConverterResourceStore> LearningModelDevice::DetensorizerStore() { - if (m_detensorizerStore == nullptr) { - m_detensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); - } + std::call_once(m_detensorizerStoreInitialized, [this](){ m_detensorizerStore = ::Windows::AI::MachineLearning::ConverterResourceStore::Create(5); }); return m_detensorizerStore; } diff --git a/winml/lib/Api/LearningModelDevice.h b/winml/lib/Api/LearningModelDevice.h index ce20a4b765..26639d7c7e 100644 --- a/winml/lib/Api/LearningModelDevice.h +++ b/winml/lib/Api/LearningModelDevice.h @@ -84,7 +84,9 @@ struct LearningModelDevice : LearningModelDeviceT m_detensorizerStore; + std::once_flag m_detensorizerStoreInitialized; std::shared_ptr m_tensorizerStore; + std::once_flag m_tensorizerStoreInitialized; std::unique_ptr m_deviceCache; };