diff --git a/include/tscore/TSSystemState.h b/include/tscore/TSSystemState.h index cc5bf3d1229..50b86a919a5 100644 --- a/include/tscore/TSSystemState.h +++ b/include/tscore/TSSystemState.h @@ -32,12 +32,19 @@ class TSSystemState { private: struct Data { - bool ssl_handshaking_stopped; - bool event_system_shut_down; - bool draining; + bool initializing = true; + bool ssl_handshaking_stopped = false; + bool event_system_shut_down = false; + bool draining = false; }; public: + static bool + is_initializing() + { + return unlikely(_instance().initializing); + } + static bool is_ssl_handshaking_stopped() { @@ -58,6 +65,14 @@ class TSSystemState return unlikely(_instance().draining); } + static void + initialization_done() + { + ink_assert(_instance().initializing); + + _instance().initializing = false; + } + static void stop_ssl_handshaking() { diff --git a/iocore/net/SSLSNIConfig.cc b/iocore/net/SSLSNIConfig.cc index ae8227545b7..309c01d5470 100644 --- a/iocore/net/SSLSNIConfig.cc +++ b/iocore/net/SSLSNIConfig.cc @@ -36,6 +36,7 @@ #include "tscpp/util/TextView.h" #include "tscore/I_Layout.h" #include +#include #include static constexpr int OVECSIZE{30}; @@ -166,13 +167,19 @@ SNIConfigParams::Initialize() return 1; } - ts::Errata zret = Y_sni.loader(sni_filename); + YamlSNIConfig Y_sni_tmp; + ts::Errata zret = Y_sni_tmp.loader(sni_filename); if (!zret.isOK()) { std::stringstream errMsg; errMsg << zret; - Error("%s failed to load: %s", sni_filename, errMsg.str().c_str()); + if (TSSystemState::is_initializing()) { + Emergency("%s failed to load: %s", sni_filename, errMsg.str().c_str()); + } else { + Error("%s failed to load: %s", sni_filename, errMsg.str().c_str()); + } return 1; } + Y_sni = std::move(Y_sni_tmp); loadSNIConfig(); Note("%s finished loading", sni_filename); diff --git a/src/traffic_server/traffic_server.cc b/src/traffic_server/traffic_server.cc index 7f50493ad79..c9520300f7d 100644 --- a/src/traffic_server/traffic_server.cc +++ b/src/traffic_server/traffic_server.cc @@ -2224,6 +2224,8 @@ main(int /* argc ATS_UNUSED */, const char **argv) } #endif + TSSystemState::initialization_done(); + while (!TSSystemState::is_event_system_shut_down()) { sleep(1); }