Main: move top-level exception handler to main()

Allows win32_main() to throw exceptions.
This commit is contained in:
Max Kellermann 2021-10-13 16:13:30 +02:00
parent 0712314d23
commit 0a8886704a
3 changed files with 15 additions and 13 deletions

View File

@ -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

View File

@ -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

View File

@ -21,6 +21,7 @@
#include "util/Compiler.h"
#include "Instance.hxx"
#include "system/FatalError.hxx"
#include "Log.hxx"
#include <cstdlib>
#include <atomic>
@ -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