[ORC] Lock ThreadSafeContext during module destruction in ThreadSafeModule's

move constructor.

This is basically the same fix as r343261, but applied to the move constructor:
Failure to lock the context during module destruction can lead to data races if
other threads are operating on the context.

llvm-svn: 343286
This commit is contained in:
Lang Hames 2018-09-28 01:41:29 +00:00
parent e624e3add2
commit 1accc97014

View File

@ -93,6 +93,12 @@ public:
// reverse order (i.e. module first) to ensure the dependencies are
// protected: The old module that is being overwritten must be destroyed
// *before* the context that it depends on.
// We also need to lock the context to make sure the module tear-down
// does not overlap any other work on the context.
if (M) {
auto L = getContextLock();
M = nullptr;
}
M = std::move(Other.M);
TSCtx = std::move(Other.TSCtx);
return *this;