summaryrefslogtreecommitdiffstats
path: root/lib/ExecutionEngine
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2017-06-29 20:15:08 +0000
committerReid Kleckner <rnk@google.com>2017-06-29 20:15:08 +0000
commit1c48ce48f37171587fc9ed752623616bf57b615e (patch)
treebb9a726c563446192390d9b2a628930061c39952 /lib/ExecutionEngine
parent7eed73772dc7f5cc7ddf352ef2216e329eab19c3 (diff)
Attempt to fix Orc JIT test timeouts
I think there are some destruction ordering issues here. The ShouldDelete map seems to be getting destroyed before the shared_ptr deleter lambda accesses it. In any case, this avoids inserting elements into the map during shutdown. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306736 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine')
-rw-r--r--lib/ExecutionEngine/Orc/OrcMCJITReplacement.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h b/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
index b20690c7caaf..690276232a6f 100644
--- a/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
+++ b/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
@@ -193,11 +193,11 @@ public:
}
auto *MPtr = M.release();
ShouldDelete[MPtr] = true;
- auto Deleter =
- [this](Module *Mod) {
- if (ShouldDelete[Mod])
- delete Mod;
- };
+ auto Deleter = [this](Module *Mod) {
+ auto I = ShouldDelete.find(Mod);
+ if (I != ShouldDelete.end() && I->second)
+ delete Mod;
+ };
LocalModules.push_back(std::shared_ptr<Module>(MPtr, std::move(Deleter)));
LazyEmitLayer.addModule(LocalModules.back(), &MemMgr, &Resolver);
}