Main: move top-level exception handler to main()
Allows win32_main() to throw exceptions.
This commit is contained in:
parent
0712314d23
commit
0a8886704a
21
src/Main.cxx
21
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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user