forked from OSchip/llvm-project
[mlir][Pass] Only enable/disable CrashRecovery once
This prevents potential problems that occur when multiple pass managers register crash recovery contexts.
This commit is contained in:
parent
c0958b7b4c
commit
bd106d7469
|
@ -670,6 +670,8 @@ RecoveryReproducerContext::RecoveryReproducerContext(
|
||||||
|
|
||||||
// Make sure that the handler is registered, and update the current context.
|
// Make sure that the handler is registered, and update the current context.
|
||||||
llvm::sys::SmartScopedLock<true> producerLock(*reproducerMutex);
|
llvm::sys::SmartScopedLock<true> producerLock(*reproducerMutex);
|
||||||
|
if (reproducerSet->empty())
|
||||||
|
llvm::CrashRecoveryContext::Enable();
|
||||||
registerSignalHandler();
|
registerSignalHandler();
|
||||||
reproducerSet->insert(this);
|
reproducerSet->insert(this);
|
||||||
}
|
}
|
||||||
|
@ -677,6 +679,8 @@ RecoveryReproducerContext::RecoveryReproducerContext(
|
||||||
RecoveryReproducerContext::~RecoveryReproducerContext() {
|
RecoveryReproducerContext::~RecoveryReproducerContext() {
|
||||||
llvm::sys::SmartScopedLock<true> producerLock(*reproducerMutex);
|
llvm::sys::SmartScopedLock<true> producerLock(*reproducerMutex);
|
||||||
reproducerSet->remove(this);
|
reproducerSet->remove(this);
|
||||||
|
if (reproducerSet->empty())
|
||||||
|
llvm::CrashRecoveryContext::Disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
LogicalResult RecoveryReproducerContext::generate(std::string &error) {
|
LogicalResult RecoveryReproducerContext::generate(std::string &error) {
|
||||||
|
@ -745,7 +749,6 @@ PassManager::runWithCrashRecovery(MutableArrayRef<std::unique_ptr<Pass>> passes,
|
||||||
verifyPasses);
|
verifyPasses);
|
||||||
|
|
||||||
// Safely invoke the passes within a recovery context.
|
// Safely invoke the passes within a recovery context.
|
||||||
llvm::CrashRecoveryContext::Enable();
|
|
||||||
LogicalResult passManagerResult = failure();
|
LogicalResult passManagerResult = failure();
|
||||||
llvm::CrashRecoveryContext recoveryContext;
|
llvm::CrashRecoveryContext recoveryContext;
|
||||||
recoveryContext.RunSafelyOnThread([&] {
|
recoveryContext.RunSafelyOnThread([&] {
|
||||||
|
@ -754,7 +757,6 @@ PassManager::runWithCrashRecovery(MutableArrayRef<std::unique_ptr<Pass>> passes,
|
||||||
return;
|
return;
|
||||||
passManagerResult = success();
|
passManagerResult = success();
|
||||||
});
|
});
|
||||||
llvm::CrashRecoveryContext::Disable();
|
|
||||||
if (succeeded(passManagerResult))
|
if (succeeded(passManagerResult))
|
||||||
return success();
|
return success();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue