diff options
author | Duarte Duarte <dnpd.dd@gmail.com> | 2015-02-15 14:56:12 +0000 |
---|---|---|
committer | Duarte Duarte <dnpd.dd@gmail.com> | 2015-02-15 14:56:12 +0000 |
commit | e68ca82d4d039a401d03de145111b0a738bb9dd7 (patch) | |
tree | baee33aa8cc4babf3ef391bc73d0ee3e827fb1dc | |
parent | ad53be708162cf277af6ae2f391e40fcf4b81333 (diff) |
Core/Server: Catch exceptions in int main()
The exceptions is rethrown on debug mode.
Ref Coverity CID 1010213, 1022574, 1227501, 1227502,
1227503, 1227504, 1227505, 1254536 and 1254612
-rw-r--r-- | src/server/bnetserver/Main.cpp | 19 | ||||
-rw-r--r-- | src/server/worldserver/Main.cpp | 22 |
2 files changed, 38 insertions, 3 deletions
diff --git a/src/server/bnetserver/Main.cpp b/src/server/bnetserver/Main.cpp index 5f4f63287e5..ab7c91512e2 100644 --- a/src/server/bnetserver/Main.cpp +++ b/src/server/bnetserver/Main.cpp @@ -61,7 +61,7 @@ boost::asio::deadline_timer _dbPingTimer(_ioService); uint32 _dbPingInterval; LoginDatabaseWorkerPool LoginDatabase; -int main(int argc, char** argv) +int mainImpl(int argc, char** argv) { std::string configFile = _TRINITY_BNET_CONFIG; auto vm = GetConsoleArguments(argc, argv, configFile); @@ -156,6 +156,23 @@ int main(int argc, char** argv) return 0; } +int main(int argc, char** argv) +{ + try + { + return mainImpl(argc, argv); + } + catch (std::exception& ex) + { + std::cerr << "Top-level exception caught:" << ex.what() << "\n"; + +#ifndef NDEBUG // rethrow exception for the debugger + throw; +#else + return 1; +#endif + } +} /// Initialize connection to the database bool StartDB() diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 15d08a903b9..362b5b05168 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -97,8 +97,7 @@ void ShutdownThreadPool(std::vector<std::thread>& threadPool); bool LoadRealmInfo(); variables_map GetConsoleArguments(int argc, char** argv, std::string& cfg_file, std::string& cfg_service); -/// Launch the Trinity server -extern int main(int argc, char** argv) +int mainImpl(int argc, char** argv) { std::string configFile = _TRINITY_CORE_CONFIG; std::string configService; @@ -306,6 +305,25 @@ extern int main(int argc, char** argv) return World::GetExitCode(); } +/// Launch the Trinity server +extern int main(int argc, char** argv) +{ + try + { + return mainImpl(argc, argv); + } + catch (std::exception& ex) + { + std::cerr << "Top-level exception caught:" << ex.what() << "\n"; + +#ifndef NDEBUG // rethrow exception for the debugger + throw; +#else + return 1; +#endif + } +} + void ShutdownCLIThread(std::thread* cliThread) { if (cliThread != nullptr) |