From 1c1fd6ce70ea87d207ede3458a616acc74f5f0e8 Mon Sep 17 00:00:00 2001 From: Alexander Peskov Date: Tue, 17 May 2022 14:37:34 +0300 Subject: [PATCH] [BYOC] Threadsafe initialization of JSONRuntime module Signed-off-by: Alexander Peskov --- src/runtime/contrib/json/json_runtime.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/runtime/contrib/json/json_runtime.h b/src/runtime/contrib/json/json_runtime.h index 0c6d0f6d7136..374a440e2902 100644 --- a/src/runtime/contrib/json/json_runtime.h +++ b/src/runtime/contrib/json/json_runtime.h @@ -88,8 +88,11 @@ class JSONRuntimeBase : public ModuleNode { // The function to initialize constant tensors. return PackedFunc([sptr_to_self, this](TVMArgs args, TVMRetValue* rv) { ICHECK_EQ(args.size(), 1U); - this->Init(args[0]); - this->initialized_ = true; + std::lock_guard guard(this->initialize_mutex_); + if (!this->initialized_) { + this->Init(args[0]); + this->initialized_ = true; + } *rv = 0; }); } else { @@ -270,6 +273,8 @@ class JSONRuntimeBase : public ModuleNode { std::vector const_idx_; /*! \brief Indicate if the engine has been initialized. */ bool initialized_{false}; + /*! \brief Initializer mutex*/ + std::mutex initialize_mutex_; }; } // namespace json