Fix a multithreaded bug in llvm LazyInitJIT (#3158)
authorYinghai Lu <yinghai@fb.com>
Thu, 9 May 2019 15:46:10 +0000 (08:46 -0700)
committerTianqi Chen <tqchen@users.noreply.github.com>
Thu, 9 May 2019 15:46:10 +0000 (08:46 -0700)
src/codegen/llvm/llvm_module.cc

index 10b891c..2b3f316 100644 (file)
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  *   http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -226,8 +226,10 @@ class LLVMModuleNode final : public runtime::ModuleNode {
 
  private:
   void LazyInitJIT() {
-    CHECK(ee_ == nullptr);
     std::lock_guard<std::mutex> lock(mutex_);
+    if (ee_) {
+      return;
+    }
     llvm::EngineBuilder builder(std::move(module_));
     std::string triple, mcpu, mattr;
     llvm::TargetOptions opt;