From 28a0c5ea525b44e24991ae4672e66daa4ac1ba6f Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 4 Aug 2014 19:10:38 +0100 Subject: [PATCH] use a global mutex to ensure bridge environment is correct --- source/backend/plugin/CarlaPluginThread.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/backend/plugin/CarlaPluginThread.cpp b/source/backend/plugin/CarlaPluginThread.cpp index a7f4d3bf7..7f1eee196 100644 --- a/source/backend/plugin/CarlaPluginThread.cpp +++ b/source/backend/plugin/CarlaPluginThread.cpp @@ -125,6 +125,7 @@ void CarlaPluginThread::run() switch (fMode) { case PLUGIN_THREAD_NULL: + case PLUGIN_THREAD_BRIDGE: break; case PLUGIN_THREAD_DSSI_GUI: @@ -134,9 +135,6 @@ void CarlaPluginThread::run() fProcess->kill(); fProcess = nullptr; return; - - case PLUGIN_THREAD_BRIDGE: - break; } } @@ -157,6 +155,9 @@ void CarlaPluginThread::run() arguments.add(fBinary.buffer()); + // use a global mutex to ensure bridge environment is correct + static CarlaMutex sEnvMutex; + switch (fMode) { case PLUGIN_THREAD_NULL: @@ -183,18 +184,18 @@ void CarlaPluginThread::run() break; case PLUGIN_THREAD_BRIDGE: - // FIXME - carla_setenv("ENGINE_BRIDGE_SHM_IDS", fExtra2.buffer()); - carla_setenv("ENGINE_BRIDGE_CLIENT_NAME", name.toRawUTF8()); - carla_setenv("ENGINE_BRIDGE_OSC_URL", String(String(fEngine->getOscServerPathUDP()) + String("/") + String(fPlugin->getId())).toRawUTF8()); - carla_setenv("WINEDEBUG", "-all"); - /* osc-url */ arguments.add(String(fEngine->getOscServerPathUDP()) + String("/") + String(fPlugin->getId())); /* stype */ arguments.add(fExtra1.buffer()); /* filename */ arguments.add(fPlugin->getFilename()); /* name */ arguments.add(name); /* label */ arguments.add(fLabel.buffer()); /* uniqueId */ arguments.add(String(static_cast(fPlugin->getUniqueId()))); + + sEnvMutex.lock(); + carla_setenv("ENGINE_BRIDGE_SHM_IDS", fExtra2.buffer()); + carla_setenv("ENGINE_BRIDGE_CLIENT_NAME", name.toRawUTF8()); + carla_setenv("ENGINE_BRIDGE_OSC_URL", String(String(fEngine->getOscServerPathUDP()) + String("/") + String(fPlugin->getId())).toRawUTF8()); + carla_setenv("WINEDEBUG", "-all"); break; } @@ -249,6 +250,7 @@ void CarlaPluginThread::run() break; case PLUGIN_THREAD_BRIDGE: + sEnvMutex.unlock(); //fProcess->waitForFinished(-1); while (fProcess->isRunning() && ! shouldThreadExit())