diff --git a/include/armadillo_bits/fft_engine_fftw3.hpp b/include/armadillo_bits/fft_engine_fftw3.hpp index a5070648..5fbc642d 100644 --- a/include/armadillo_bits/fft_engine_fftw3.hpp +++ b/include/armadillo_bits/fft_engine_fftw3.hpp @@ -50,7 +50,8 @@ class fft_engine_fftw3 podarray Y_work; // for storing output inline - ~fft_engine_fftw3() + void + finish() { arma_debug_sigprint(); @@ -59,6 +60,33 @@ class fft_engine_fftw3 // fftw3::cleanup(); // NOTE: this also removes any wisdom acquired by FFTW3 } + inline + ~fft_engine_fftw3() + { + arma_debug_sigprint(); + + #if defined(ARMA_USE_OPENMP) + { + #pragma omp critical (arma_fft_engine_fftw3) + { + (*this).finish(); + } + } + #elif defined(ARMA_USE_STD_MUTEX) + { + std::mutex& plan_mutex = fft_engine_fftw3_aux::get_plan_mutex(); + + const std::lock_guard lock(plan_mutex); + + (*this).finish(); + } + #else + { + (*this).finish(); + } + #endif + } + inline fft_engine_fftw3(const uword in_N) : N (in_N )