Browse Source

Better bridge wait code (server-side)

tags/1.9.6
falkTX 10 years ago
parent
commit
55d786cf24
1 changed files with 37 additions and 14 deletions
  1. +37
    -14
      source/backend/plugin/CarlaPluginBridge.cpp

+ 37
- 14
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -40,6 +40,7 @@ using juce::File;
using juce::ScopedPointer; using juce::ScopedPointer;
using juce::String; using juce::String;
using juce::StringArray; using juce::StringArray;
using juce::Time;


CARLA_BACKEND_START_NAMESPACE CARLA_BACKEND_START_NAMESPACE


@@ -742,7 +743,7 @@ public:
fSaved(true), fSaved(true),
fTimedOut(false), fTimedOut(false),
fTimedError(false), fTimedError(false),
fLastPongCounter(-1),
fLastPongTime(-1),
fBridgeBinary(), fBridgeBinary(),
fBridgeThread(engine, this), fBridgeThread(engine, this),
fShmAudioPool(), fShmAudioPool(),
@@ -932,15 +933,19 @@ public:
if (fSaved) if (fSaved)
return; return;


const uint32_t timeoutEnd(Time::getMillisecondCounter() + 3000);

carla_stdout("CarlaPluginBridge::waitForSaved() - now waiting..."); carla_stdout("CarlaPluginBridge::waitForSaved() - now waiting...");


for (int i=0; i < 300; ++i)
for (; Time::getMillisecondCounter() < timeoutEnd && fBridgeThread.isThreadRunning();)
{ {
if (fSaved || ! fBridgeThread.isThreadRunning())
break;
carla_msleep(20);
pData->engine->callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr); pData->engine->callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr);
pData->engine->idle(); pData->engine->idle();

if (fSaved)
break;

carla_msleep(20);
} }


if (! fSaved) if (! fSaved)
@@ -1897,8 +1902,8 @@ public:
carla_debug("CarlaPluginBridge::handleNonRtData() - got opcode: %s", PluginBridgeNonRtServerOpcode2str(opcode)); carla_debug("CarlaPluginBridge::handleNonRtData() - got opcode: %s", PluginBridgeNonRtServerOpcode2str(opcode));
} }
#endif #endif
if (opcode != kPluginBridgeNonRtServerNull && fLastPongCounter > 0)
fLastPongCounter = 0;
if (opcode != kPluginBridgeNonRtServerNull && fLastPongTime > 0)
fLastPongTime = Time::currentTimeMillis();


switch (opcode) switch (opcode)
{ {
@@ -2427,19 +2432,37 @@ public:
} }


fInitiated = false; fInitiated = false;
fLastPongCounter = 0;
fLastPongTime = Time::currentTimeMillis();
CARLA_SAFE_ASSERT(fLastPongTime > 0);

static bool sFirstInit = true;


for (; fLastPongCounter++ < 500;)
int64_t timeoutEnd = 5000;

if (sFirstInit)
timeoutEnd *= 2;
#ifndef CARLA_OS_WIN
if (fBinaryType == BINARY_WIN32 || fBinaryType == BINARY_WIN64)
timeoutEnd *= 2;
#endif
sFirstInit = false;

carla_stdout("plugin bridge starting, current time: " P_INT64 "; max wait time: " P_INT64, fLastPongTime, timeoutEnd);

for (; Time::currentTimeMillis() < fLastPongTime + timeoutEnd && fBridgeThread.isThreadRunning();)
{ {
if (fInitiated || ! fBridgeThread.isThreadRunning())
break;
carla_msleep(20);
pData->engine->callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr); pData->engine->callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr);
pData->engine->idle(); pData->engine->idle();
idle(); idle();

if (fInitiated)
break;

carla_msleep(20);
carla_stdout("plugin bridge waiting 20ms, remainig time: " P_INT64, fLastPongTime + timeoutEnd - Time::currentTimeMillis());
} }


fLastPongCounter = -1;
fLastPongTime = -1;


if (fInitError || ! fInitiated) if (fInitError || ! fInitiated)
{ {
@@ -2483,7 +2506,7 @@ private:
bool fTimedOut; bool fTimedOut;
bool fTimedError; bool fTimedError;


int32_t fLastPongCounter;
int64_t fLastPongTime;


CarlaString fBridgeBinary; CarlaString fBridgeBinary;
CarlaPluginBridgeThread fBridgeThread; CarlaPluginBridgeThread fBridgeThread;


Loading…
Cancel
Save