Browse Source

Cleanup CarlaPluginThread

tags/1.9.4
falkTX 12 years ago
parent
commit
ce258e5c46
5 changed files with 55 additions and 44 deletions
  1. +30
    -32
      source/backend/plugin/CarlaPluginThread.cpp
  2. +7
    -7
      source/backend/plugin/CarlaPluginThread.hpp
  3. +1
    -1
      source/tests/ANSI.cpp
  4. +2
    -2
      source/tests/Makefile
  5. +15
    -2
      source/utils/CarlaString.hpp

+ 30
- 32
source/backend/plugin/CarlaPluginThread.cpp View File

@@ -15,7 +15,10 @@
* For a full copy of the GNU General Public License see the GPL.txt file
*/

#include "CarlaPluginInternal.hpp"
#include "CarlaPluginThread.hpp"

#include "CarlaPlugin.hpp"
#include "CarlaEngine.hpp"

#include <QtCore/QProcess>

@@ -35,44 +38,42 @@ const char* PluginThreadMode2str(const CarlaPluginThread::PluginThreadMode mode)
return "PLUGIN_THREAD_BRIDGE";
}

qWarning("CarlaPluginThread::PluginThreadMode2str(%i) - invalid mode", mode);
carla_stderr("CarlaPluginThread::PluginThreadMode2str(%i) - invalid mode", mode);
return nullptr;
}

CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const PluginThreadMode mode, QObject* const parent)
: QThread(parent),
kEngine(engine),
CarlaPluginThread::CarlaPluginThread(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin, const PluginThreadMode mode)
: kEngine(engine),
kPlugin(plugin),
kMode(mode)
kMode(mode),
fProcess(nullptr)
{
qDebug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->name(), engine->getName(), PluginThreadMode2str(mode));

fProcess = nullptr;
carla_debug("CarlaPluginThread::CarlaPluginThread(plugin:\"%s\", engine:\"%s\", %s)", plugin->name(), engine->getName(), PluginThreadMode2str(mode));
}

CarlaPluginThread::~CarlaPluginThread()
{
if (fProcess != nullptr)
delete fProcess;
delete fProcess;
}

void CarlaPluginThread::setOscData(const char* const binary, const char* const label, const char* const data1)
void CarlaPluginThread::setOscData(const char* const binary, const char* const label, const char* const extra)
{
fBinary = binary;
fLabel = label;
fData1 = data1;
fExtra = extra;
}

void CarlaPluginThread::run()
{
qDebug("CarlaPluginThread::run()");
carla_debug("CarlaPluginThread::run()");

if (fProcess == nullptr)
{
fProcess = new QProcess(nullptr);
fProcess->setProcessChannelMode(QProcess::ForwardedChannels);
fProcess = new QProcess(nullptr);
fProcess->setProcessChannelMode(QProcess::ForwardedChannels);
#ifndef BUILD_BRIDGE
fProcess->setProcessEnvironment(kEngine->getOptionsAsProcessEnvironment());
fProcess->setProcessEnvironment(kEngine->getOptionsAsProcessEnvironment());
#endif
}

@@ -91,7 +92,7 @@ void CarlaPluginThread::run()
case PLUGIN_THREAD_LV2_GUI:
/* osc_url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathTCP()).arg(kPlugin->id());
/* URI */ arguments << (const char*)fLabel;
/* ui-URI */ arguments << (const char*)fData1;
/* ui-URI */ arguments << (const char*)fExtra;
/* ui-title */ arguments << QString("%1 (GUI)").arg(kPlugin->name());
break;

@@ -103,7 +104,7 @@ void CarlaPluginThread::run()

case PLUGIN_THREAD_BRIDGE:
/* osc_url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathTCP()).arg(kPlugin->id());
/* stype */ arguments << (const char*)fData1;
/* stype */ arguments << (const char*)fExtra;
/* filename */ arguments << kPlugin->filename();
/* name */ arguments << name;
/* label */ arguments << (const char*)fLabel;
@@ -125,21 +126,20 @@ void CarlaPluginThread::run()
if (fProcess->exitCode() == 0)
{
// Hide
kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), 0, 0, 0.0, nullptr);
qWarning("CarlaPluginThread::run() - GUI closed");
kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), 0, 0, 0.0f, nullptr);
carla_stdout("CarlaPluginThread::run() - GUI closed");
}
else
{
// Kill
kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), -1, 0, 0.0, nullptr);
qWarning("CarlaPluginThread::run() - GUI crashed");
break;
kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), -1, 0, 0.0f, nullptr);
carla_stderr("CarlaPluginThread::run() - GUI crashed");
}
}
else
{
qDebug("CarlaPluginThread::run() - GUI timeout");
kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), 0, 0, 0.0, nullptr);
carla_debug("CarlaPluginThread::run() - GUI timeout");
kEngine->callback(CarlaBackend::CALLBACK_SHOW_GUI, kPlugin->id(), 0, 0, 0.0f, nullptr);
}
break;

@@ -148,15 +148,13 @@ void CarlaPluginThread::run()

if (fProcess->exitCode() != 0)
{
qWarning("CarlaPluginThread::run() - bridge crashed");
carla_stderr("CarlaPluginThread::run() - bridge crashed");

QString errorString = QString("Plugin '%1' has crashed!\n"
"Saving now will lose its current settings.\n"
"Please remove this plugin, and not rely on it from this point.").arg(kPlugin->name());
kEngine->setLastError(errorString.toUtf8().constData());
kEngine->callback(CarlaBackend::CALLBACK_ERROR, kPlugin->id(), 0, 0, 0.0, nullptr);
CarlaString errorString("Plugin '" + CarlaString(kPlugin->name()) + "' has crashed!\n"
"Saving now will lose its current settings.\n"
"Please remove this plugin, and not rely on it from this point.");
kEngine->callback(CarlaBackend::CALLBACK_ERROR, kPlugin->id(), 0, 0, 0.0f, (const char*)errorString);
}

break;
}
}


+ 7
- 7
source/backend/plugin/CarlaPluginThread.hpp View File

@@ -18,15 +18,15 @@
#ifndef __CARLA_PLUGIN_THREAD_HPP__
#define __CARLA_PLUGIN_THREAD_HPP__

#include "CarlaBackendUtils.hpp"
#include <QtCore/QThread>
#include "CarlaBackend.hpp"
#include "CarlaString.hpp"
#include "CarlaThread.hpp"

class QProcess;

CARLA_BACKEND_START_NAMESPACE

class CarlaPluginThread : public QThread
class CarlaPluginThread : public CarlaThread
{
public:
enum PluginThreadMode {
@@ -36,10 +36,10 @@ public:
PLUGIN_THREAD_BRIDGE
};

CarlaPluginThread(CarlaEngine* const engine, CarlaPlugin* const plugin, const PluginThreadMode mode, QObject* const parent = nullptr);
CarlaPluginThread(CarlaEngine* const engine, CarlaPlugin* const plugin, const PluginThreadMode mode);
~CarlaPluginThread();

void setOscData(const char* const binary, const char* const label, const char* const data1="");
void setOscData(const char* const binary, const char* const label, const char* const extra="");

protected:
void run();
@@ -51,7 +51,7 @@ private:

CarlaString fBinary;
CarlaString fLabel;
CarlaString fData1;
CarlaString fExtra;
QProcess* fProcess;
};



+ 1
- 1
source/tests/ANSI.cpp View File

@@ -17,7 +17,7 @@

// still need qt classes check
//#include "CarlaPlugin.hpp"
#include "engine/RtAudio.cpp"
#include "plugin/CarlaPluginThread.cpp"

#if 0
#include "CarlaDefines.hpp"


+ 2
- 2
source/tests/Makefile View File

@@ -10,8 +10,8 @@ include ../Makefile.mk

BUILD_CXX_FLAGS += -I../backend -I../includes -I../libs -I../utils -Wall -Wextra
BUILD_CXX_FLAGS += -DWANT_JACK -DWANT_RTAUDIO
BUILD_CXX_FLAGS += -isystem /usr/include/qt4 -isystem ../backend/engine/rtaudio-4.0.11
# BUILD_CXX_FLAGS += -D_FORTIFY_SOURCE=2 -fstack-protector
BUILD_CXX_FLAGS += -isystem /usr/include/qt4
# BUILD_CXX_FLAGS += -isystem ../backend/engine/rtaudio-4.0.11
# BUILD_CXX_FLAGS += -I/opt/mingw32/include

ANSI_CXX_FLAGS = -ansi -pedantic -pedantic-errors -Wunused-parameter -Wuninitialized -Wno-vla


+ 15
- 2
source/utils/CarlaString.hpp View File

@@ -460,12 +460,25 @@ private:
CARLA_PREVENT_HEAP_ALLOCATION
};

static inline
CarlaString operator+(const CarlaString& strBefore, const char* const strBufAfter)
{
const char* const strBufBefore = (const char*)strBefore;
const size_t newBufSize = strBefore.length() + ((strBufAfter != nullptr) ? std::strlen(strBufAfter) : 0) + 1;
char newBuf[newBufSize];

std::strcpy(newBuf, strBufBefore);
std::strcat(newBuf, strBufAfter);

return CarlaString(newBuf);
}

static inline
CarlaString operator+(const char* const strBufBefore, const CarlaString& strAfter)
{
const char* const strBufAfter = (const char*)strAfter;
const size_t newBufSize = ((strBufBefore != nullptr) ? std::strlen(strBufBefore) : 0) + std::strlen(strBufAfter) + 1;
char newBuf[newBufSize];
const size_t newBufSize = ((strBufBefore != nullptr) ? std::strlen(strBufBefore) : 0) + strAfter.length() + 1;
char newBuf[newBufSize];

std::strcpy(newBuf, strBufBefore);
std::strcat(newBuf, strBufAfter);


Loading…
Cancel
Save