| @@ -41,17 +41,16 @@ struct ParamSymbol { | |||||
| uint32_t index; | uint32_t index; | ||||
| const char* symbol; | const char* symbol; | ||||
| ParamSymbol(uint32_t index_, const char* symbol_) | |||||
| : index(index_), | |||||
| symbol(carla_strdup(symbol_)) {} | |||||
| ParamSymbol(uint32_t i, const char* s) | |||||
| : index(i), | |||||
| symbol(carla_strdup(s)) {} | |||||
| void free() | |||||
| ~ParamSymbol() | |||||
| { | { | ||||
| if (symbol != nullptr) | |||||
| { | |||||
| delete[] symbol; | |||||
| symbol = nullptr; | |||||
| } | |||||
| CARLA_SAFE_ASSERT_RETURN(symbol != nullptr,) | |||||
| delete[] symbol; | |||||
| symbol = nullptr; | |||||
| } | } | ||||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | #ifdef CARLA_PROPER_CPP11_SUPPORT | ||||
| @@ -109,6 +108,8 @@ const char* CarlaPluginProtectedData::libError(const char* const filename) | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Settings functions, defined in CarlaPluginInternal.hpp | // Settings functions, defined in CarlaPluginInternal.hpp | ||||
| // FIXME - this doesn't work!! | |||||
| void CarlaPluginProtectedData::saveSetting(const unsigned int option, const bool yesNo) | void CarlaPluginProtectedData::saveSetting(const unsigned int option, const bool yesNo) | ||||
| { | { | ||||
| PropertiesFile::Options opts; | PropertiesFile::Options opts; | ||||
| @@ -226,7 +227,7 @@ CarlaPlugin::CarlaPlugin(CarlaEngine* const engine, const unsigned int id) | |||||
| fIconName("plugin"), | fIconName("plugin"), | ||||
| pData(new CarlaPluginProtectedData(engine, this)) | pData(new CarlaPluginProtectedData(engine, this)) | ||||
| { | { | ||||
| CARLA_ASSERT(engine != nullptr); | |||||
| CARLA_SAFE_ASSERT_RETURN(engine != nullptr,); | |||||
| CARLA_ASSERT(id < engine->getMaxPluginNumber()); | CARLA_ASSERT(id < engine->getMaxPluginNumber()); | ||||
| CARLA_ASSERT(id == engine->getCurrentPluginCount()); | CARLA_ASSERT(id == engine->getCurrentPluginCount()); | ||||
| carla_debug("CarlaPlugin::CarlaPlugin(%p, %i)", engine, id); | carla_debug("CarlaPlugin::CarlaPlugin(%p, %i)", engine, id); | ||||
| @@ -776,7 +777,6 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
| for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | ||||
| { | { | ||||
| ParamSymbol* const paramSymbol(*it); | ParamSymbol* const paramSymbol(*it); | ||||
| paramSymbol->free(); | |||||
| delete paramSymbol; | delete paramSymbol; | ||||
| } | } | ||||
| @@ -658,10 +658,10 @@ struct CarlaPluginProtectedData { | |||||
| if (client != nullptr) | if (client != nullptr) | ||||
| { | { | ||||
| CARLA_ASSERT(! client->isActive()); | |||||
| if (client->isActive()) | if (client->isActive()) | ||||
| client->deactivate(); | client->deactivate(); | ||||
| else | |||||
| carla_assert("client->isActive()", __FILE__, __LINE__); | |||||
| clearBuffers(); | clearBuffers(); | ||||
| @@ -673,27 +673,29 @@ struct CarlaPluginProtectedData { | |||||
| { | { | ||||
| CustomData& cData(*it); | CustomData& cData(*it); | ||||
| CARLA_ASSERT(cData.type != nullptr); | |||||
| CARLA_ASSERT(cData.key != nullptr); | |||||
| CARLA_ASSERT(cData.value != nullptr); | |||||
| if (cData.type != nullptr) | if (cData.type != nullptr) | ||||
| { | { | ||||
| delete[] cData.type; | delete[] cData.type; | ||||
| cData.type = nullptr; | cData.type = nullptr; | ||||
| } | } | ||||
| else | |||||
| carla_assert("cData.type != nullptr", __FILE__, __LINE__); | |||||
| if (cData.key != nullptr) | if (cData.key != nullptr) | ||||
| { | { | ||||
| delete[] cData.key; | delete[] cData.key; | ||||
| cData.key = nullptr; | cData.key = nullptr; | ||||
| } | } | ||||
| else | |||||
| carla_assert("cData.key != nullptr", __FILE__, __LINE__); | |||||
| if (cData.value != nullptr) | if (cData.value != nullptr) | ||||
| { | { | ||||
| delete[] cData.value; | delete[] cData.value; | ||||
| cData.value = nullptr; | cData.value = nullptr; | ||||
| } | } | ||||
| else | |||||
| carla_assert("cData.value != nullptr", __FILE__, __LINE__); | |||||
| } | } | ||||
| prog.clear(); | prog.clear(); | ||||
| @@ -719,13 +721,10 @@ struct CarlaPluginProtectedData { | |||||
| for (uint32_t i=0; i < audioIn.count; ++i) | for (uint32_t i=0; i < audioIn.count; ++i) | ||||
| { | { | ||||
| CARLA_ASSERT(latencyBuffers[i] != nullptr); | |||||
| CARLA_SAFE_ASSERT_CONTINUE(latencyBuffers[i] != nullptr); | |||||
| if (latencyBuffers[i] != nullptr) | |||||
| { | |||||
| delete[] latencyBuffers[i]; | |||||
| latencyBuffers[i] = nullptr; | |||||
| } | |||||
| delete[] latencyBuffers[i]; | |||||
| latencyBuffers[i] = nullptr; | |||||
| } | } | ||||
| delete[] latencyBuffers; | delete[] latencyBuffers; | ||||
| @@ -751,13 +750,10 @@ struct CarlaPluginProtectedData { | |||||
| for (uint32_t i=0; i < audioIn.count; ++i) | for (uint32_t i=0; i < audioIn.count; ++i) | ||||
| { | { | ||||
| CARLA_ASSERT(latencyBuffers[i] != nullptr); | |||||
| CARLA_SAFE_ASSERT_CONTINUE(latencyBuffers[i] != nullptr); | |||||
| if (latencyBuffers[i] != nullptr) | |||||
| { | |||||
| delete[] latencyBuffers[i]; | |||||
| latencyBuffers[i] = nullptr; | |||||
| } | |||||
| delete[] latencyBuffers[i]; | |||||
| latencyBuffers[i] = nullptr; | |||||
| } | } | ||||
| delete[] latencyBuffers; | delete[] latencyBuffers; | ||||
| @@ -72,6 +72,11 @@ if __name__ == '__main__': | |||||
| # ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||
| # Init host backend | # Init host backend | ||||
| Carla.isControl = False | |||||
| Carla.isLocal = True | |||||
| Carla.isPlugin = False | |||||
| Carla.processMode = PROCESS_MODE_MULTIPLE_CLIENTS | |||||
| initHost(appName, libPrefix) | initHost(appName, libPrefix) | ||||
| # ------------------------------------------------------------- | # ------------------------------------------------------------- | ||||