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