Browse Source

Close jack client after right deactivation, needed for jack1

jack1 does not wait for deactivate to stop the audio thread,
this leads to race conditions while we delete our audio buffers.

Signed-off-by: falkTX <falktx@falktx.com>
tags/v1.9.14
falkTX 5 years ago
parent
commit
737a0b0fb7
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 3 additions and 16 deletions
  1. +3
    -16
      source/backend/engine/CarlaEngineJack.cpp

+ 3
- 16
source/backend/engine/CarlaEngineJack.cpp View File

@@ -1068,8 +1068,9 @@ public:

CARLA_SAFE_ASSERT_RETURN_ERR(fClient != nullptr, "JACK Client is null");

// deactivate first
const bool deactivated(jackbridge_deactivate(fClient));
// deactivate and close client
jackbridge_deactivate(fClient);
jackbridge_client_close(fClient);

// clear engine data
CarlaEngine::close();
@@ -1084,24 +1085,10 @@ public:
if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK ||
pData->options.processMode == ENGINE_PROCESS_MODE_PATCHBAY)
{
if (deactivated)
{
jackbridge_port_unregister(fClient, fRackPorts[kRackPortAudioIn1]);
jackbridge_port_unregister(fClient, fRackPorts[kRackPortAudioIn2]);
jackbridge_port_unregister(fClient, fRackPorts[kRackPortAudioOut1]);
jackbridge_port_unregister(fClient, fRackPorts[kRackPortAudioOut2]);
jackbridge_port_unregister(fClient, fRackPorts[kRackPortEventIn]);
jackbridge_port_unregister(fClient, fRackPorts[kRackPortEventOut]);
}
carla_zeroPointers(fRackPorts, kRackPortCount);

pData->graph.destroy();
}

// close client
if (deactivated)
jackbridge_client_close(fClient);

fClient = nullptr;
return true;
#endif


Loading…
Cancel
Save