From 737a0b0fb7dea524eced619d4bc55c7d41e73964 Mon Sep 17 00:00:00 2001 From: falkTX Date: Wed, 27 Feb 2019 22:20:39 +0100 Subject: [PATCH] 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 --- source/backend/engine/CarlaEngineJack.cpp | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/source/backend/engine/CarlaEngineJack.cpp b/source/backend/engine/CarlaEngineJack.cpp index de2a5d333..3d4339a2a 100644 --- a/source/backend/engine/CarlaEngineJack.cpp +++ b/source/backend/engine/CarlaEngineJack.cpp @@ -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