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() { ...@@ -77,7 +77,7 @@ void FatalSignalCallbackRegistry::markInstalled() {
void FatalSignalCallbackRegistry::run() { void FatalSignalCallbackRegistry::run() {
if (!installed_) { if (!installed_) {
return; // Shouldn't happen return;
} }
for (auto& fn : handlers_) { for (auto& fn : handlers_) {
...@@ -251,6 +251,10 @@ void addFatalSignalCallback(SignalCallback cb) { ...@@ -251,6 +251,10 @@ void addFatalSignalCallback(SignalCallback cb) {
gFatalSignalCallbackRegistry->add(cb); gFatalSignalCallbackRegistry->add(cb);
} }
void installFatalSignalCallbacks() {
gFatalSignalCallbackRegistry->markInstalled();
}
namespace { namespace {
std::atomic<bool> gAlreadyInstalled; std::atomic<bool> gAlreadyInstalled;
...@@ -263,8 +267,6 @@ void installFatalSignalHandler() { ...@@ -263,8 +267,6 @@ void installFatalSignalHandler() {
return; return;
} }
gFatalSignalCallbackRegistry->markInstalled();
struct sigaction sa; struct sigaction sa;
memset(&sa, 0, sizeof(sa)); memset(&sa, 0, sizeof(sa));
sigemptyset(&sa.sa_mask); sigemptyset(&sa.sa_mask);
......
...@@ -30,7 +30,6 @@ namespace folly { namespace symbolizer { ...@@ -30,7 +30,6 @@ namespace folly { namespace symbolizer {
*/ */
void installFatalSignalHandler(); void installFatalSignalHandler();
/** /**
* Add a callback to be run when receiving a fatal signal. They will also * 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). * be called by LOG(FATAL) and abort() (as those raise SIGABRT internally).
...@@ -39,11 +38,17 @@ void installFatalSignalHandler(); ...@@ -39,11 +38,17 @@ void installFatalSignalHandler();
* LOG(...) or printf or malloc / new or doing anything even remotely fun. * LOG(...) or printf or malloc / new or doing anything even remotely fun.
* *
* All these fatal callback must be added before calling * All these fatal callback must be added before calling
* installFatalSignalHandler(). * installFatalSignalCallbacks(), below.
*/ */
typedef void (*SignalCallback)(void); typedef void (*SignalCallback)(void);
void addFatalSignalCallback(SignalCallback callback); 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 }} // namespaces
......
...@@ -269,12 +269,12 @@ void SymbolizePrinter::print(uintptr_t address, const SymbolizedFrame& frame) { ...@@ -269,12 +269,12 @@ void SymbolizePrinter::print(uintptr_t address, const SymbolizedFrame& frame) {
char mangledBuf[1024]; char mangledBuf[1024];
if (!frame.found) { if (!frame.found) {
doPrint(" (not found)\n"); doPrint(" (not found)");
return; return;
} }
if (frame.name.empty()) { if (frame.name.empty()) {
doPrint(" (unknown)\n"); doPrint(" (unknown)");
} else if (frame.name.size() >= sizeof(mangledBuf)) { } else if (frame.name.size() >= sizeof(mangledBuf)) {
doPrint(" "); doPrint(" ");
doPrint(frame.name); 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