From 881c178458b2f996ead6e6ecbab0965ae38ae171 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 29 Dec 2014 04:12:23 +0000 Subject: [PATCH] Small plugin-bridge fixes --- source/backend/engine/CarlaEngineBridge.cpp | 13 ++++---- source/backend/plugin/CarlaPluginBridge.cpp | 37 ++++++++++----------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/source/backend/engine/CarlaEngineBridge.cpp b/source/backend/engine/CarlaEngineBridge.cpp index d452fdfee..4f1072ac5 100644 --- a/source/backend/engine/CarlaEngineBridge.cpp +++ b/source/backend/engine/CarlaEngineBridge.cpp @@ -365,7 +365,6 @@ public: fShmRtClientControl(), fShmNonRtClientControl(), fShmNonRtServerControl(), - fIsRunning(false), fIsOffline(false), fFirstIdle(true), fLastPingCounter(-1), @@ -389,6 +388,8 @@ public: ~CarlaEngineBridge() noexcept override { carla_debug("CarlaEngineBridge::~CarlaEngineBridge()"); + + clear(); } // ------------------------------------- @@ -504,7 +505,7 @@ public: bool isRunning() const noexcept override { - return isThreadRunning(); + return isThreadRunning() || ! fFirstIdle; } bool isOffline() const noexcept override @@ -855,15 +856,15 @@ public: } #endif + if (opcode != kPluginBridgeNonRtClientNull && fLastPingCounter > 0) + fLastPingCounter = 0; + switch (opcode) { case kPluginBridgeNonRtClientNull: break; case kPluginBridgeNonRtClientPing: { - if (fLastPingCounter > 0) - fLastPingCounter = 0; - const CarlaMutexLocker _cml(fShmNonRtServerControl.mutex); fShmNonRtServerControl.writeOpcode(kPluginBridgeNonRtServerPong); @@ -1395,7 +1396,6 @@ protected: carla_stderr2("Could not post to client rt semaphore"); } - fIsRunning = false; callback(ENGINE_CALLBACK_ENGINE_STOPPED, 0, 0, 0, 0.0f, nullptr); } @@ -1420,7 +1420,6 @@ private: BridgeNonRtClientControl fShmNonRtClientControl; BridgeNonRtServerControl fShmNonRtServerControl; - bool fIsRunning; bool fIsOffline; bool fFirstIdle; int32_t fLastPingCounter; diff --git a/source/backend/plugin/CarlaPluginBridge.cpp b/source/backend/plugin/CarlaPluginBridge.cpp index 1712d81d3..7ceb829c7 100644 --- a/source/backend/plugin/CarlaPluginBridge.cpp +++ b/source/backend/plugin/CarlaPluginBridge.cpp @@ -484,14 +484,14 @@ public: void setData(const char* const binary, const char* const label, const char* const shmIds) noexcept { CARLA_SAFE_ASSERT_RETURN(binary != nullptr && binary[0] != '\0',); - CARLA_SAFE_ASSERT_RETURN(label != nullptr,); CARLA_SAFE_ASSERT_RETURN(shmIds != nullptr && shmIds[0] != '\0',); CARLA_SAFE_ASSERT(! isThreadRunning()); fBinary = binary; - fLabel = label; fShmIds = shmIds; + if (label != nullptr) + fLabel = label; if (fLabel.isEmpty()) fLabel = "\"\""; } @@ -1859,14 +1859,13 @@ public: carla_debug("CarlaPluginBridge::handleNonRtData() - got opcode: %s", PluginBridgeNonRtServerOpcode2str(opcode)); } #endif + if (opcode != kPluginBridgeNonRtServerNull && fLastPongCounter > 0) + fLastPongCounter = 0; + switch (opcode) { case kPluginBridgeNonRtServerNull: - break; - case kPluginBridgeNonRtServerPong: - if (fLastPongCounter > 0) - fLastPongCounter = 0; break; case kPluginBridgeNonRtServerPluginInfo1: { @@ -1962,7 +1961,7 @@ public: fParams = new BridgeParamInfo[count]; // we might not receive all parameter data, so ensure range max is not 0 - for (uint32_t i=0; iparam.ranges[i].def = 0.0f; pData->param.ranges[i].min = 0.0f; @@ -2069,8 +2068,6 @@ public: const uint32_t index = fShmNonRtServerControl.readUInt(); const float value = fShmNonRtServerControl.readFloat(); - CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count); - if (index < pData->param.count) { const float fixedValue(pData->param.getFixedValue(index, value)); @@ -2085,8 +2082,6 @@ public: const uint32_t index = fShmNonRtServerControl.readUInt(); const float value = fShmNonRtServerControl.readFloat(); - CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count); - if (index < pData->param.count) { const float fixedValue(pData->param.getFixedValue(index, value)); @@ -2099,8 +2094,6 @@ public: const uint32_t index = fShmNonRtServerControl.readUInt(); const float value = fShmNonRtServerControl.readFloat(); - CARLA_SAFE_ASSERT_INT2(index < pData->param.count, index, pData->param.count); - if (index < pData->param.count) pData->param.ranges[index].def = value; } break; @@ -2305,16 +2298,24 @@ public: return false; } + if (bridgeBinary == nullptr || bridgeBinary[0] == '\0') + { + pData->engine->setLastError("null bridge binary"); + return false; + } + // --------------------------------------------------------------- // set info if (name != nullptr && name[0] != '\0') pData->name = pData->engine->getUniquePluginName(name); - pData->filename = carla_strdup(filename); + if (filename != nullptr && filename[0] != '\0') + pData->filename = carla_strdup(filename); + else + pData->filename = carla_strdup(""); - if (bridgeBinary != nullptr) - fBridgeBinary = bridgeBinary; + fBridgeBinary = bridgeBinary; std::srand(static_cast(std::time(nullptr))); @@ -2416,9 +2417,7 @@ public: if (pData->name == nullptr) { - if (name != nullptr && name[0] != '\0') - pData->name = pData->engine->getUniquePluginName(name); - else if (label != nullptr && label[0] != '\0') + if (label != nullptr && label[0] != '\0') pData->name = pData->engine->getUniquePluginName(label); else pData->name = pData->engine->getUniquePluginName("unknown");