[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 <alicja.miloszewska@intel.com>
This commit is contained in:
Vishniakov Nikolai 2024-06-11 10:35:12 +02:00 committed by GitHub
parent 1a5776e8ef
commit 6e2286086f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 6 deletions

View File

@ -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<ov::Model> _model;
};

View File

@ -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() {

View File

@ -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();