From e2a3bb9086da8da6ea1ef0c84066748a9e5ac1cf Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 12 May 2022 11:01:20 +0000 Subject: Wrap the FNET_Transport to make it exception safe. --- searchcore/src/apps/proton/proton.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'searchcore/src/apps/proton/proton.cpp') diff --git a/searchcore/src/apps/proton/proton.cpp b/searchcore/src/apps/proton/proton.cpp index c823ee8a09f..4dc8a90079a 100644 --- a/searchcore/src/apps/proton/proton.cpp +++ b/searchcore/src/apps/proton/proton.cpp @@ -203,6 +203,19 @@ buildTransportConfig() { return fnet::TransportConfig(std::max(1u, std::min(4u, numProcs/8))); } +class Transport { +public: + Transport(const fnet::TransportConfig & config) + : _transport(config) + {} + ~Transport() { + _transport.ShutDown(true); + } + FNET_Transport & transport() { return _transport; } +private: + FNET_Transport _transport; +}; + } void @@ -268,10 +281,9 @@ App::main(int argc, char **argv) setupSignals(); setup_fadvise(); FastOS_ThreadPool threadPool(128_Ki); - FNET_Transport transport(buildTransportConfig()); - transport.Start(&threadPool); - startAndRun(threadPool, transport, argc, argv); - transport.ShutDown(true); + Transport transport(buildTransportConfig()); + transport.transport().Start(&threadPool); + startAndRun(threadPool, transport.transport(), argc, argv); } catch (const vespalib::InvalidCommandLineArgumentsException &e) { LOG(warning, "Invalid commandline arguments: '%s'", e.what()); return 1; -- cgit v1.2.3