Use the spinlock mutex in FilterPool

This commit is contained in:
Jean Pierre Cimalando 2020-08-06 16:45:56 +02:00
parent 5928218b62
commit 76654d56ea
2 changed files with 4 additions and 3 deletions

View file

@ -109,7 +109,7 @@ sfz::FilterPool::FilterPool(const MidiState& state, int numFilters)
sfz::FilterHolderPtr sfz::FilterPool::getFilter(const FilterDescription& description, unsigned numChannels, int noteNumber, float velocity)
{
const std::unique_lock<std::mutex> lock { filterGuard, std::try_to_lock };
const std::unique_lock<SpinMutex> lock { filterGuard, std::try_to_lock };
if (!lock.owns_lock())
return {};
@ -133,7 +133,7 @@ size_t sfz::FilterPool::getActiveFilters() const
size_t sfz::FilterPool::setNumFilters(size_t numFilters)
{
const std::lock_guard<std::mutex> filterLock { filterGuard };
const std::lock_guard<SpinMutex> filterLock { filterGuard };
swapAndPopAll(filters, [](sfz::FilterHolderPtr& filter) { return filter.use_count() == 1; });

View file

@ -3,6 +3,7 @@
#include "FilterDescription.h"
#include "MidiState.h"
#include "Defaults.h"
#include "utility/SpinMutex.h"
#include <vector>
#include <memory>
#include <mutex>
@ -120,7 +121,7 @@ public:
*/
void setSampleRate(float sampleRate);
private:
std::mutex filterGuard;
SpinMutex filterGuard;
float sampleRate { config::defaultSampleRate };
const MidiState& midiState;
std::vector<FilterHolderPtr> filters;