diff --git a/winml/adapter/WinMLAdapter.cpp b/winml/adapter/WinMLAdapter.cpp index 46f8c4c84b..53515e11a7 100644 --- a/winml/adapter/WinMLAdapter.cpp +++ b/winml/adapter/WinMLAdapter.cpp @@ -262,12 +262,15 @@ class WinMLAdapter : public Microsoft::WRL::RuntimeClass< Microsoft::WRL::RuntimeClassFlags, IWinMLAdapter> { private: - std::shared_ptr lotus_environment_; + // TODO: Making this static is only temporary. A fix addressing the resulting the memory leaks is needed. + static std::shared_ptr lotus_environment_; public: - WinMLAdapter() : lotus_environment_(PheonixSingleton()) { + WinMLAdapter() { + if (lotus_environment_ == nullptr) { + lotus_environment_ = PheonixSingleton(); + } } - // factory methods for creating an ort model from a path HRESULT STDMETHODCALLTYPE CreateModelProto( const char* path, @@ -644,6 +647,7 @@ class WinMLAdapter : public Microsoft::WRL::RuntimeClass< } WINML_CATCH_ALL_COM }; // namespace Windows::AI::MachineLearning::Adapter +std::shared_ptr WinMLAdapter::lotus_environment_ = nullptr; extern "C" HRESULT STDMETHODCALLTYPE OrtGetWinMLAdapter(IWinMLAdapter** adapter) try { // make an adapter instance