From 74fd9b2b0cc009d68cfa74582a3c2bfc37427550 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 3f5a4a9a7..568e6b655 100644 --- a/source/backend/engine/CarlaEngineJack.cpp +++ b/source/backend/engine/CarlaEngineJack.cpp @@ -1071,8 +1071,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(); @@ -1087,24 +1088,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