diff --git a/mlir/lib/IR/MLIRContext.cpp b/mlir/lib/IR/MLIRContext.cpp index c5d66c27557c50..350680692a6e0f 100644 --- a/mlir/lib/IR/MLIRContext.cpp +++ b/mlir/lib/IR/MLIRContext.cpp @@ -286,8 +286,16 @@ class MLIRContextImpl { if (threadingIsEnabled) { ownedThreadPool = std::make_unique(); threadPool = ownedThreadPool.get(); + } else { + disableUniquerMultithreading(true); } } + /// Update the threading mode for each of the uniquers. + void disableUniquerMultithreading(bool disable) { + affineUniquer.disableMultithreading(disable); + attributeUniquer.disableMultithreading(disable); + typeUniquer.disableMultithreading(disable); + } ~MLIRContextImpl() { for (auto typeMapping : registeredTypes) typeMapping.second->~AbstractType(); @@ -624,10 +632,7 @@ void MLIRContext::disableMultithreading(bool disable) { impl->threadingIsEnabled = !disable; - // Update the threading mode for each of the uniquers. - impl->affineUniquer.disableMultithreading(disable); - impl->attributeUniquer.disableMultithreading(disable); - impl->typeUniquer.disableMultithreading(disable); + impl->disableUniquerMultithreading(disable); // Destroy thread pool (stop all threads) if it is no longer needed, or create // a new one if multithreading was re-enabled.