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 * 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> #include <QtCore/QProcess>


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


qWarning("CarlaPluginThread::PluginThreadMode2str(%i) - invalid mode", mode);
carla_stderr("CarlaPluginThread::PluginThreadMode2str(%i) - invalid mode", mode);
return nullptr; 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), 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() CarlaPluginThread::~CarlaPluginThread()
{ {
if (fProcess != nullptr) 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; fBinary = binary;
fLabel = label; fLabel = label;
fData1 = data1;
fExtra = extra;
} }


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


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


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


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


case PLUGIN_THREAD_BRIDGE: case PLUGIN_THREAD_BRIDGE:
/* osc_url */ arguments << QString("%1/%2").arg(kEngine->getOscServerPathTCP()).arg(kPlugin->id()); /* 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(); /* filename */ arguments << kPlugin->filename();
/* name */ arguments << name; /* name */ arguments << name;
/* label */ arguments << (const char*)fLabel; /* label */ arguments << (const char*)fLabel;
@@ -125,21 +126,20 @@ void CarlaPluginThread::run()
if (fProcess->exitCode() == 0) if (fProcess->exitCode() == 0)
{ {
// Hide // 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 else
{ {
// Kill // 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 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; break;


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


if (fProcess->exitCode() != 0) 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; break;
} }
} }


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

@@ -18,15 +18,15 @@
#ifndef __CARLA_PLUGIN_THREAD_HPP__ #ifndef __CARLA_PLUGIN_THREAD_HPP__
#define __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; class QProcess;


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


class CarlaPluginThread : public QThread
class CarlaPluginThread : public CarlaThread
{ {
public: public:
enum PluginThreadMode { enum PluginThreadMode {
@@ -36,10 +36,10 @@ public:
PLUGIN_THREAD_BRIDGE 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(); ~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: protected:
void run(); void run();
@@ -51,7 +51,7 @@ private:


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




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

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


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


#if 0 #if 0
#include "CarlaDefines.hpp" #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 += -I../backend -I../includes -I../libs -I../utils -Wall -Wextra
BUILD_CXX_FLAGS += -DWANT_JACK -DWANT_RTAUDIO 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 # BUILD_CXX_FLAGS += -I/opt/mingw32/include


ANSI_CXX_FLAGS = -ansi -pedantic -pedantic-errors -Wunused-parameter -Wuninitialized -Wno-vla 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 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 static inline
CarlaString operator+(const char* const strBufBefore, const CarlaString& strAfter) CarlaString operator+(const char* const strBufBefore, const CarlaString& strAfter)
{ {
const char* const strBufAfter = (const char*)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::strcpy(newBuf, strBufBefore);
std::strcat(newBuf, strBufAfter); std::strcat(newBuf, strBufAfter);


Loading…
Cancel
Save