Commit 613bec48 authored by Tudor Bosman's avatar Tudor Bosman Committed by Jordan DeLong

Separate installFatalSignalCallbacks

Summary:
We want to install the signal handler first and then give users an opportunity
to add their callbacks.

Test Plan: built

Reviewed By: lucian@fb.com

FB internal diff: D1092083

@override-unit-failures
parent 5357f0f4
......@@ -77,7 +77,7 @@ void FatalSignalCallbackRegistry::markInstalled() {
void FatalSignalCallbackRegistry::run() {
if (!installed_) {
return; // Shouldn't happen
return;
}
for (auto& fn : handlers_) {
......@@ -251,6 +251,10 @@ void addFatalSignalCallback(SignalCallback cb) {
gFatalSignalCallbackRegistry->add(cb);
}
void installFatalSignalCallbacks() {
gFatalSignalCallbackRegistry->markInstalled();
}
namespace {
std::atomic<bool> gAlreadyInstalled;
......@@ -263,8 +267,6 @@ void installFatalSignalHandler() {
return;
}
gFatalSignalCallbackRegistry->markInstalled();
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sigemptyset(&sa.sa_mask);
......
......@@ -30,7 +30,6 @@ namespace folly { namespace symbolizer {
*/
void installFatalSignalHandler();
/**
* Add a callback to be run when receiving a fatal signal. They will also
* be called by LOG(FATAL) and abort() (as those raise SIGABRT internally).
......@@ -39,11 +38,17 @@ void installFatalSignalHandler();
* LOG(...) or printf or malloc / new or doing anything even remotely fun.
*
* All these fatal callback must be added before calling
* installFatalSignalHandler().
* installFatalSignalCallbacks(), below.
*/
typedef void (*SignalCallback)(void);
void addFatalSignalCallback(SignalCallback callback);
/**
* Install the fatal signal callbacks; fatal signals will call these
* callbacks in the order in which they were added.
*/
void installFatalSignalCallbacks();
}} // namespaces
......
......@@ -269,12 +269,12 @@ void SymbolizePrinter::print(uintptr_t address, const SymbolizedFrame& frame) {
char mangledBuf[1024];
if (!frame.found) {
doPrint(" (not found)\n");
doPrint(" (not found)");
return;
}
if (frame.name.empty()) {
doPrint(" (unknown)\n");
doPrint(" (unknown)");
} else if (frame.name.size() >= sizeof(mangledBuf)) {
doPrint(" ");
doPrint(frame.name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment