[LLD] Avoid exiting with a locked mutex NFC
In ErrorHandler::error(), rearrange code to avoid calling exitLld with the mutex locked. Acquire mutex lock when flushing the output streams in exitLld. Differential Revision: https://reviews.llvm.org/D73281
This commit is contained in:
parent
f117f2cc78
commit
de2dfc8b20
@ -62,8 +62,11 @@ void lld::exitLld(int val) {
|
||||
// avoid intermittent crashes on Windows when exiting.
|
||||
llvm_shutdown();
|
||||
|
||||
lld::outs().flush();
|
||||
lld::errs().flush();
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mu);
|
||||
lld::outs().flush();
|
||||
lld::errs().flush();
|
||||
}
|
||||
_exit(val);
|
||||
}
|
||||
|
||||
@ -191,20 +194,26 @@ void ErrorHandler::error(const Twine &msg) {
|
||||
}
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> lock(mu);
|
||||
bool exit = false;
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mu);
|
||||
|
||||
if (errorLimit == 0 || errorCount < errorLimit) {
|
||||
lld::errs() << sep << getLocation(msg) << ": " << Colors::RED
|
||||
<< "error: " << Colors::RESET << msg << "\n";
|
||||
} else if (errorCount == errorLimit) {
|
||||
lld::errs() << sep << getLocation(msg) << ": " << Colors::RED
|
||||
<< "error: " << Colors::RESET << errorLimitExceededMsg << "\n";
|
||||
if (exitEarly)
|
||||
exitLld(1);
|
||||
if (errorLimit == 0 || errorCount < errorLimit) {
|
||||
lld::errs() << sep << getLocation(msg) << ": " << Colors::RED
|
||||
<< "error: " << Colors::RESET << msg << "\n";
|
||||
} else if (errorCount == errorLimit) {
|
||||
lld::errs() << sep << getLocation(msg) << ": " << Colors::RED
|
||||
<< "error: " << Colors::RESET << errorLimitExceededMsg
|
||||
<< "\n";
|
||||
exit = exitEarly;
|
||||
}
|
||||
|
||||
sep = getSeparator(msg);
|
||||
++errorCount;
|
||||
}
|
||||
|
||||
sep = getSeparator(msg);
|
||||
++errorCount;
|
||||
if (exit)
|
||||
exitLld(1);
|
||||
}
|
||||
|
||||
void ErrorHandler::fatal(const Twine &msg) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user