Commit a6754a7c authored by Dan Melnic's avatar Dan Melnic Committed by Facebook Github Bot

Fix gFatalSignalCallbackRegistry SIOF issue

Summary: Fix gFatalSignalCallbackRegistry SIOF issue

Reviewed By: yfeldblum

Differential Revision: D13317694

fbshipit-source-id: a828901dd42841b83a464ae759b7461b7d8fdca1
parent f53901c9
......@@ -86,9 +86,13 @@ void FatalSignalCallbackRegistry::run() {
}
}
// Leak it so we don't have to worry about destruction order
FatalSignalCallbackRegistry* gFatalSignalCallbackRegistry =
new FatalSignalCallbackRegistry;
static FatalSignalCallbackRegistry* getFatalSignalCallbackRegistry() {
// Leak it so we don't have to worry about destruction order
static FatalSignalCallbackRegistry* gFatalSignalCallbackRegistry =
new FatalSignalCallbackRegistry();
return gFatalSignalCallbackRegistry;
}
struct {
int number;
......@@ -417,7 +421,7 @@ void innerSignalHandler(int signum, siginfo_t* info, void* /* uctx */) {
gStackTracePrinter->printStackTrace(true); // with symbolization
// Run user callbacks
gFatalSignalCallbackRegistry->run();
getFatalSignalCallbackRegistry()->run();
}
void signalHandler(int signum, siginfo_t* info, void* uctx) {
......@@ -436,11 +440,11 @@ void signalHandler(int signum, siginfo_t* info, void* uctx) {
} // namespace
void addFatalSignalCallback(SignalCallback cb) {
gFatalSignalCallbackRegistry->add(cb);
getFatalSignalCallbackRegistry()->add(cb);
}
void installFatalSignalCallbacks() {
gFatalSignalCallbackRegistry->markInstalled();
getFatalSignalCallbackRegistry()->markInstalled();
}
namespace {
......@@ -471,6 +475,10 @@ void installFatalSignalHandler() {
return;
}
// make sure gFatalSignalCallbackRegistry is created before we
// install the fatal signal handler
getFatalSignalCallbackRegistry();
// If a small sigaltstack is enabled (ex. Rust stdlib might use sigaltstack
// to set a small stack), the default SafeStackTracePrinter would likely
// stack overflow. Replace it with the unsafe self-allocate printer.
......
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