From 79535212c871a0428a813c72cf349332d6d5d165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Kr=C3=B6ner?= Date: Sat, 3 Mar 2018 20:56:28 +0100 Subject: [PATCH] Get rid of GCD on macOS which breaks debug builds With Grand Central Dispatch used in Main.cxx, debug builds on macOS crash as the IsInside() assertion gets triggered in the event loop. As a simple fix, usage of GCD is removed. Plugging and unplugging headphones or changes of the default output device was tested without issues. Whatever the original commit tried to fix by GCD probably does not need fixing anymore. --- NEWS | 1 + src/Main.cxx | 19 +------------------ 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/NEWS b/NEWS index ba33b53a7..5c40e4f6c 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,5 @@ ver 0.20.19 (not yet released) +* macOS: fix crash bug ver 0.20.18 (2018/02/24) * input diff --git a/src/Main.cxx b/src/Main.cxx index def4aed30..31c4d9fbd 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -107,10 +107,6 @@ #include #endif -#ifdef __BLOCKS__ -#include -#endif - #include static constexpr size_t KILOBYTE = 1024; @@ -483,21 +479,8 @@ try { daemonize_begin(options.daemon); #endif -#ifdef __BLOCKS__ - /* Runs the OS X native event loop in the main thread, and runs - the rest of mpd_main on a new thread. This lets CoreAudio receive - route change notifications (e.g. plugging or unplugging headphones). - All hardware output on OS X ultimately uses CoreAudio internally. - This must be run after forking; if dispatch is called before forking, - the child process will have a broken internal dispatch state. */ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - exit(mpd_main_after_fork(config)); - }); - dispatch_main(); - return EXIT_FAILURE; // unreachable, because dispatch_main never returns -#else return mpd_main_after_fork(config); -#endif + } catch (const std::exception &e) { LogError(e); return EXIT_FAILURE;