From a429748e244f67f6f144a697f3aa1b1978705b11 Mon Sep 17 00:00:00 2001 From: Nan Zhu Date: Fri, 26 Apr 2019 18:41:02 -0700 Subject: [PATCH] allow multi call on init (#92) --- src/engine.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/engine.cc b/src/engine.cc index 30e3d4f92..b57e9445b 100644 --- a/src/engine.cc +++ b/src/engine.cc @@ -45,11 +45,11 @@ typedef ThreadLocalStore EngineThreadLocal; /*! \brief intiialize the synchronization module */ void Init(int argc, char *argv[]) { ThreadLocalEntry* e = EngineThreadLocal::Get(); - utils::Check(e->engine.get() == nullptr, - "rabit::Init is already called in this thread"); - e->initialized = true; - e->engine.reset(new Manager()); - e->engine->Init(argc, argv); + if (e->engine.get() == nullptr) { + e->initialized = true; + e->engine.reset(new Manager()); + e->engine->Init(argc, argv); + } } /*! \brief finalize syncrhonization module */ @@ -59,6 +59,7 @@ void Finalize() { "rabit::Finalize engine is not initialized or already been finalized."); e->engine->Shutdown(); e->engine.reset(nullptr); + e->initialized = false; } /*! \brief singleton method to get engine */ @@ -68,8 +69,7 @@ IEngine *GetEngine() { ThreadLocalEntry* e = EngineThreadLocal::Get(); IEngine* ptr = e->engine.get(); if (ptr == nullptr) { - utils::Check(!e->initialized, - "Doing rabit call after Finalize"); + utils::Check(!e->initialized, "the rabit has not been initialized"); return &default_manager; } else { return ptr;