From fd19e8483b8d3f208d16e89272e07ac6330630d8 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 8 Mar 2019 07:36:33 +0100 Subject: [PATCH] Init juce gui before engine; Init fftw thread-safe only once Signed-off-by: falkTX --- source/backend/CarlaStandalone.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/source/backend/CarlaStandalone.cpp b/source/backend/CarlaStandalone.cpp index 0ec2fa410..5265aeaf2 100644 --- a/source/backend/CarlaStandalone.cpp +++ b/source/backend/CarlaStandalone.cpp @@ -128,7 +128,8 @@ public: }; ThreadSafeFFTW() - : libfftw3(nullptr), + : initialized(false), + libfftw3(nullptr), libfftw3f(nullptr), libfftw3l(nullptr), libfftw3q(nullptr) {} @@ -140,6 +141,10 @@ public: void init() { + if (initialized) + return; + initialized = true; + if ((libfftw3 = lib_open("libfftw3_threads.so.3")) != nullptr) if (const void_func func = lib_symbol(libfftw3, "fftw_make_planner_thread_safe")) func(); @@ -159,6 +164,10 @@ public: void deinit() { + if (! initialized) + return; + initialized = false; + if (libfftw3 != nullptr) { lib_close(libfftw3); @@ -185,6 +194,7 @@ public: } private: + bool initialized; lib_t libfftw3; lib_t libfftw3f; lib_t libfftw3l; @@ -415,6 +425,10 @@ bool carla_engine_init(const char* driverName, const char* clientName) carla_setenv("WINEASIO_CLIENT_NAME", clientName); #endif +#ifdef USING_JUCE + juce::initialiseJuce_GUI(); +#endif + CarlaEngine* const engine = CarlaEngine::newDriverByName(driverName); CARLA_SAFE_ASSERT_WITH_LAST_ERROR_RETURN(engine != nullptr, "The seleted audio driver is not available", false); @@ -431,10 +445,6 @@ bool carla_engine_init(const char* driverName, const char* clientName) engine->setOption(CB::ENGINE_OPTION_TRANSPORT_MODE, static_cast(gStandalone.engineOptions.transportMode), gStandalone.engineOptions.transportExtra); #endif -#ifdef USING_JUCE - juce::initialiseJuce_GUI(); -#endif - carla_engine_init_common(engine); if (engine->init(clientName)) @@ -453,6 +463,7 @@ bool carla_engine_init(const char* driverName, const char* clientName) { gStandalone.lastError = engine->getLastError(); gStandalone.engine = nullptr; + delete engine; #ifdef USING_JUCE juce::shutdownJuce_GUI(); #endif