aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/main.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2026-01-19 15:47:59 +0100
committerGitHub Enterprise <[email protected]>2026-01-19 15:47:59 +0100
commit975babca65c6e118db268c6335a4ecbf7c2a9744 (patch)
tree08c9ad8a58a7a2393ab10b26666d5fd29d44bd63 /src/zenserver/main.cpp
parentZenServerProcess API changes (#719) (diff)
downloadzen-975babca65c6e118db268c6335a4ecbf7c2a9744.tar.xz
zen-975babca65c6e118db268c6335a4ecbf7c2a9744.zip
zenserver API changes, some other minor changes (#720)
* add system metrics output to top command * removed unnecessary xmake directives * file system API/comment tweaks * fixed out-of-range access in httpserver test * updated ZenServer base API to allow customization by mode
Diffstat (limited to 'src/zenserver/main.cpp')
-rw-r--r--src/zenserver/main.cpp54
1 files changed, 41 insertions, 13 deletions
diff --git a/src/zenserver/main.cpp b/src/zenserver/main.cpp
index da256d06d..78bce7d06 100644
--- a/src/zenserver/main.cpp
+++ b/src/zenserver/main.cpp
@@ -54,8 +54,6 @@ SignalCallbackHandler(int SigNum)
namespace zen {
-using namespace std::literals;
-
//////////////////////////////////////////////////////////////////////////
#if ZEN_PLATFORM_WINDOWS
@@ -89,6 +87,13 @@ AppMain(int argc, char* argv[])
{
using namespace std::literals;
+ signal(SIGINT, utils::SignalCallbackHandler);
+ signal(SIGTERM, utils::SignalCallbackHandler);
+
+#if ZEN_PLATFORM_LINUX
+ IgnoreChildSignals();
+#endif
+
try
{
typename Main::Config ServerOptions;
@@ -227,26 +232,49 @@ main(int argc, char* argv[])
#endif // ZEN_PLATFORM_WINDOWS
using namespace zen;
+ using namespace std::literals;
+
+ auto _ = zen::MakeGuard([] {
+ // Allow some time for worker threads to unravel, in an effort
+ // to prevent shutdown races in TLS object destruction
+ WaitForThreads(1000);
+ });
+
+ enum
+ {
+ kHub,
+ kStore,
+ kTest
+ } ServerMode = kStore;
if (argc >= 2)
{
- if (argv[1] == "test"sv)
+ if (argv[1] == "hub"sv)
{
+ ServerMode = kHub;
+ }
+ else if (argv[1] == "store"sv)
+ {
+ ServerMode = kStore;
+ }
+ else if (argv[1] == "test"sv)
+ {
+ ServerMode = kTest;
+ }
+ }
+
+ switch (ServerMode)
+ {
+ case kTest:
#if ZEN_WITH_TESTS
return test_main(argc, argv);
#else
fprintf(stderr, "test option not available in release mode!\n");
exit(5);
#endif
- }
+ break;
+ default:
+ case kStore:
+ return AppMain<ZenStorageServerMain>(argc, argv);
}
-
- signal(SIGINT, utils::SignalCallbackHandler);
- signal(SIGTERM, utils::SignalCallbackHandler);
-
-#if ZEN_PLATFORM_LINUX
- IgnoreChildSignals();
-#endif
-
- return AppMain<ZenStorageServerMain>(argc, argv);
}