commit 186e362c37b33668950c7fdfd7f06556d5690396
parent 12324f74c9ef5810dee2b6e388cd51a0e9be4f1d
Author: fundamental <[email protected]>
Date: Mon, 20 Oct 2014 11:21:26 -0400
Fix Another MemPool Corruption Bug
The Allocator can no longer be copied eliminating one class of bugs as seen in
the formant filter allocation
Thanks to HPS for spotting this bug and submitting the initial patch
Diffstat:
4 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/DSP/Filter.cpp b/src/DSP/Filter.cpp
@@ -52,7 +52,7 @@ Filter *Filter::generate(Allocator &memory, FilterParams *pars,
Filter *filter;
switch(pars->Pcategory) {
case 1:
- filter = memory.alloc<FormantFilter>(pars, memory, srate, bufsize);
+ filter = memory.alloc<FormantFilter>(pars, &memory, srate, bufsize);
break;
case 2:
filter = memory.alloc<SVFilter>(Ftype, 1000.0f, pars->getq(), Fstages, srate, bufsize);
diff --git a/src/DSP/FormantFilter.cpp b/src/DSP/FormantFilter.cpp
@@ -28,8 +28,8 @@
#include "AnalogFilter.h"
#include "../Params/FilterParams.h"
-FormantFilter::FormantFilter(FilterParams *pars, Allocator &alloc, unsigned int srate, int bufsize)
- : Filter(srate, bufsize), memory(alloc)
+FormantFilter::FormantFilter(FilterParams *pars, Allocator *alloc, unsigned int srate, int bufsize)
+ : Filter(srate, bufsize), memory(*alloc)
{
numformants = pars->Pnumformants;
for(int i = 0; i < numformants; ++i)
diff --git a/src/DSP/FormantFilter.h b/src/DSP/FormantFilter.h
@@ -31,7 +31,7 @@ class Allocator;
class FormantFilter:public Filter
{
public:
- FormantFilter(class FilterParams *pars, Allocator &alloc, unsigned int srate, int bufsize);
+ FormantFilter(class FilterParams *pars, Allocator *alloc, unsigned int srate, int bufsize);
~FormantFilter();
void filterout(float *smp);
void setfreq(float frequency);
diff --git a/src/Misc/Allocator.h b/src/Misc/Allocator.h
@@ -4,6 +4,7 @@ class Allocator
{
public:
Allocator(void);
+ Allocator(const Allocator&) = delete;
~Allocator(void);
void *alloc_mem(size_t mem_size);
void dealloc_mem(void *memory);