From 2139349468145af1c198ac7fb8afb78ca9ceb8be Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 21 Mar 2025 15:43:32 +0100 Subject: [PATCH] Use global FFT planner lock in GUI This *should* not be needed since the GUI is single threaded, but it doesn't hurt, just in case some someday someone uses a background thread :) --- gtk2_ardour/fft.cc | 4 ++++ gtk2_ardour/fft_graph.cc | 2 ++ 2 files changed, 6 insertions(+) diff --git a/gtk2_ardour/fft.cc b/gtk2_ardour/fft.cc index b46e81a9b8..6d00698152 100644 --- a/gtk2_ardour/fft.cc +++ b/gtk2_ardour/fft.cc @@ -22,6 +22,8 @@ #include #include +#include "ardour/ardour.h" + using namespace GTKArdour; FFT::FFT(uint32_t windowSize) @@ -37,6 +39,7 @@ FFT::FFT(uint32_t windowSize) _power_at_bin = (float *) malloc(sizeof(float) * _data_size); _phase_at_bin = (float *) malloc(sizeof(float) * _data_size); + Glib::Threads::Mutex::Lock lk (ARDOUR::fft_planner_lock); _plan = fftwf_plan_r2r_1d(_window_size, _fftInput, _fftOutput, FFTW_R2HC, FFTW_ESTIMATE); reset(); @@ -138,6 +141,7 @@ FFT::~FFT() if (_hann_window) { free(_hann_window); } + Glib::Threads::Mutex::Lock lk (ARDOUR::fft_planner_lock); fftwf_destroy_plan(_plan); free(_power_at_bin); free(_phase_at_bin); diff --git a/gtk2_ardour/fft_graph.cc b/gtk2_ardour/fft_graph.cc index 30a7d6f219..529b36ec02 100644 --- a/gtk2_ardour/fft_graph.cc +++ b/gtk2_ardour/fft_graph.cc @@ -92,6 +92,7 @@ FFTGraph::setWindowSize_internal (int windowSize) _windowSize = windowSize; _dataSize = windowSize / 2; if (_in != 0) { + Glib::Threads::Mutex::Lock lk (ARDOUR::fft_planner_lock); fftwf_destroy_plan (_plan); free (_in); _in = 0; @@ -143,6 +144,7 @@ FFTGraph::setWindowSize_internal (int windowSize) for (unsigned int i = 0; i < _dataSize; i++) { _logScale[i] = 0; } + Glib::Threads::Mutex::Lock lk (ARDOUR::fft_planner_lock); _plan = fftwf_plan_r2r_1d (_windowSize, _in, _out, FFTW_R2HC, FFTW_MEASURE); }