From 6e2286086f7c3c752c9320e35611ca4579043263 Mon Sep 17 00:00:00 2001 From: Vishniakov Nikolai Date: Tue, 11 Jun 2024 10:35:12 +0200 Subject: [PATCH] [OV JS] Fix multiple Core instances (#24053) ### Details: - New instance of Core creating on execution of readModel method. This PR is fixing this behavior. ### Tickets: - 138160 --------- Co-authored-by: Alicja Miloszewska --- src/bindings/js/node/include/async_reader.hpp | 5 ++++- src/bindings/js/node/src/async_reader.cpp | 6 ++---- src/bindings/js/node/src/core_wrap.cpp | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/bindings/js/node/include/async_reader.hpp b/src/bindings/js/node/include/async_reader.hpp index 2e67fd48715..6666872651f 100644 --- a/src/bindings/js/node/include/async_reader.hpp +++ b/src/bindings/js/node/include/async_reader.hpp @@ -12,11 +12,13 @@ class ReaderWorker : public Napi::AsyncWorker { public: /** * @brief Constructs ReaderWorker class that is responisible for reading the model asynchronously. + * @note In the Execute() method, the Core object might be used concurrently to call read_model(). * @param info contains passed arguments. Can be empty. */ - ReaderWorker(const Napi::Env& env, ReadModelArgs* args) + ReaderWorker(const Napi::Env& env, ov::Core& core, ReadModelArgs* args) : Napi::AsyncWorker{env, "ReaderWorker"}, _deferred{env}, + _core{core}, _args{args}, _model{} { OPENVINO_ASSERT(_args, "Invalid pointer to ReadModelArgs."); @@ -35,6 +37,7 @@ protected: ///@} private: Napi::Promise::Deferred _deferred; + ov::Core& _core; ReadModelArgs* _args; std::shared_ptr _model; }; diff --git a/src/bindings/js/node/src/async_reader.cpp b/src/bindings/js/node/src/async_reader.cpp index c4616da838a..8faaf47ab0a 100644 --- a/src/bindings/js/node/src/async_reader.cpp +++ b/src/bindings/js/node/src/async_reader.cpp @@ -6,12 +6,10 @@ #include "node/include/model_wrap.hpp" void ReaderWorker::Execute() { - ov::Core core; - if (_args->model_str.empty()) - _model = core.read_model(_args->model_path, _args->bin_path); + _model = _core.read_model(_args->model_path, _args->bin_path); else - _model = core.read_model(_args->model_str, _args->weight_tensor); + _model = _core.read_model(_args->model_str, _args->weight_tensor); } void ReaderWorker::OnOK() { diff --git a/src/bindings/js/node/src/core_wrap.cpp b/src/bindings/js/node/src/core_wrap.cpp index 8951a8c7afb..6a96eb8fa9b 100644 --- a/src/bindings/js/node/src/core_wrap.cpp +++ b/src/bindings/js/node/src/core_wrap.cpp @@ -76,7 +76,7 @@ Napi::Value CoreWrap::read_model_sync(const Napi::CallbackInfo& info) { Napi::Value CoreWrap::read_model_async(const Napi::CallbackInfo& info) { try { ReadModelArgs* args = new ReadModelArgs(info); - ReaderWorker* _readerWorker = new ReaderWorker(info.Env(), args); + ReaderWorker* _readerWorker = new ReaderWorker(info.Env(), _core, args); _readerWorker->Queue(); return _readerWorker->GetPromise();