Skip to content

Commit 15802d8

Browse files
authored
Merge pull request #36210 from vespa-engine/vekterli/init-absl-symbolizer
Explicitly initialize Abseil symbolizer on process startup
2 parents 8f96656 + d32a42e commit 15802d8

4 files changed

Lines changed: 14 additions & 4 deletions

File tree

searchcore/src/apps/proton/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ vespa_add_executable(searchcore_proton_app
2424
searchcore_proton_metrics
2525
storageserver_storageapp
2626
absl::failure_signal_handler
27+
absl::symbolize
2728
)

searchcore/src/apps/proton/proton.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <vespa/fnet/transport.h>
1414
#include <vespa/fastos/file_interface.h>
1515
#include <absl/debugging/failure_signal_handler.h>
16+
#include <absl/debugging/symbolize.h>
1617
#include <filesystem>
1718
#include <iostream>
1819
#include <thread>
@@ -43,7 +44,7 @@ Params::~Params() = default;
4344
class App
4445
{
4546
private:
46-
static void setupSignals();
47+
static void setupSignals(char **argv);
4748
static void setup_fadvise();
4849
Params parseParams(int argc, char **argv);
4950
void startAndRun(FNET_Transport & transport, int argc, char **argv);
@@ -52,8 +53,12 @@ class App
5253
};
5354

5455
void
55-
App::setupSignals()
56+
App::setupSignals(char **argv)
5657
{
58+
// Ensure that symbolizer global setup/allocation happens prior to any invocations of
59+
// the symbolizer itself. Otherwise, we risk nested failures when the symbolizer attempts
60+
// to allocate internal structures when processing an abort-signal caused by an OOM.
61+
absl::InitializeSymbolizer(argv[0]);
5762
absl::FailureSignalHandlerOptions opts;
5863
// Sanitizers set up their own signal handler, so we must ensure that the failure signal
5964
// handler calls this when it's done, or we won't get a proper report.
@@ -325,7 +330,7 @@ int
325330
App::main(int argc, char **argv)
326331
{
327332
try {
328-
setupSignals();
333+
setupSignals(argv);
329334
setup_fadvise();
330335
FastOS_FileInterface::enableFSync();
331336
Transport transport(buildTransportConfig());

storageserver/src/apps/storaged/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ vespa_add_executable(storageserver_storaged_app
99
storageserver_storageapp
1010
protobuf::libprotobuf
1111
absl::failure_signal_handler
12+
absl::symbolize
1213
)
1314

1415
vespa_add_target_package_dependency(storageserver_storaged_app Protobuf)

storageserver/src/apps/storaged/storage.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <vespa/vespalib/util/signalhandler.h>
2323
#include <google/protobuf/message_lite.h>
2424
#include <absl/debugging/failure_signal_handler.h>
25+
#include <absl/debugging/symbolize.h>
2526
#include <iostream>
2627
#include <csignal>
2728
#include <cstdlib>
@@ -214,8 +215,10 @@ int StorageApp::main(int argc, char **argv)
214215
} // storage
215216

216217
int main(int argc, char **argv) {
218+
// See `App::setupSignals` in `searchcore/src/apps/proton/proton.cpp` for
219+
// parameter and handler ordering rationale for the Abseil integration.
220+
absl::InitializeSymbolizer(argv[0]);
217221
absl::FailureSignalHandlerOptions opts;
218-
// See `searchcore/src/apps/proton/proton.cpp` for parameter and handler ordering rationale.
219222
opts.call_previous_handler = true;
220223
opts.use_alternate_stack = false;
221224
absl::InstallFailureSignalHandler(opts);

0 commit comments

Comments
 (0)