diff --git a/src/Main.cxx b/src/Main.cxx index 0a36bf48a..a540c81da 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -644,27 +644,26 @@ MainOrThrow(int argc, char *argv[]) MainConfigured(options, raw_config); } -int mpd_main(int argc, char *argv[]) noexcept +int +mpd_main(int argc, char *argv[]) { - AtScopeExit() { log_deinit(); }; - - try { - MainOrThrow(argc, argv); - return EXIT_SUCCESS; - } catch (...) { - LogError(std::current_exception()); - return EXIT_FAILURE; - } + MainOrThrow(argc, argv); + return EXIT_SUCCESS; } int main(int argc, char *argv[]) noexcept -{ +try { + AtScopeExit() { log_deinit(); }; + #ifdef _WIN32 return win32_main(argc, argv); #else return mpd_main(argc, argv); #endif +} catch (...) { + LogError(std::current_exception()); + return EXIT_FAILURE; } #endif diff --git a/src/Main.hxx b/src/Main.hxx index e8b9e72af..b7e9bd6ab 100644 --- a/src/Main.hxx +++ b/src/Main.hxx @@ -40,7 +40,7 @@ extern Instance *global_instance; * after doing some initialization. */ int -mpd_main(int argc, char *argv[]) noexcept; +mpd_main(int argc, char *argv[]); #endif diff --git a/src/win32/Win32Main.cxx b/src/win32/Win32Main.cxx index 81a2b274f..83c86fd30 100644 --- a/src/win32/Win32Main.cxx +++ b/src/win32/Win32Main.cxx @@ -21,6 +21,7 @@ #include "util/Compiler.h" #include "Instance.hxx" #include "system/FatalError.hxx" +#include "Log.hxx" #include #include @@ -76,7 +77,7 @@ service_dispatcher([[maybe_unused]] DWORD control, [[maybe_unused]] DWORD event_ static void WINAPI service_main([[maybe_unused]] DWORD argc, [[maybe_unused]] LPTSTR argv[]) -{ +try { service_handle = RegisterServiceCtrlHandlerEx(service_name, service_dispatcher, nullptr); @@ -87,6 +88,8 @@ service_main([[maybe_unused]] DWORD argc, [[maybe_unused]] LPTSTR argv[]) service_notify_status(SERVICE_START_PENDING); mpd_main(service_argc, service_argv); service_notify_status(SERVICE_STOPPED); +} catch (...) { + LogError(std::current_exception()); } static BOOL WINAPI