diff options
author | = <henry.gouk@gmail.com> | 2013-06-01 05:01:10 +1200 |
---|---|---|
committer | = <henry.gouk@gmail.com> | 2013-06-01 05:01:10 +1200 |
commit | d0627195cf57b5b7090d46b63b17f879abd044b2 (patch) | |
tree | c8b3f53537cf0cac8c618130388df1de648934fd /src/ffts_real_nd.c | |
parent | 02f01b1e13846f30b23267b543f46957cdc030d9 (diff) | |
download | ffts-d0627195cf57b5b7090d46b63b17f879abd044b2.zip ffts-d0627195cf57b5b7090d46b63b17f879abd044b2.tar.gz |
Fixed a memory leak for real multi-dimensional transforms.
Diffstat (limited to 'src/ffts_real_nd.c')
-rw-r--r-- | src/ffts_real_nd.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/ffts_real_nd.c b/src/ffts_real_nd.c index 56552f3..75df28d 100644 --- a/src/ffts_real_nd.c +++ b/src/ffts_real_nd.c @@ -37,6 +37,29 @@ #include "neon.h" #endif +void ffts_free_nd_real(ffts_plan_t *p) { + + int i; + for(i=0;i<p->rank;i++) { + + ffts_plan_t *x = p->plans[i]; + + int k; + for(k=i+1;k<p->rank;k++) { + if(x == p->plans[k]) p->plans[k] = NULL; + } + + ffts_free(x); + } + + free(p->Ns); + free(p->Ms); + free(p->plans); + free(p->buf); + free(p->transpose_buf); + free(p); +} + void ffts_scalar_transpose(uint64_t *in, uint64_t *out, int w, int h, uint64_t *buf) { size_t i,j; @@ -98,7 +121,7 @@ ffts_plan_t *ffts_init_nd_real(int rank, size_t *Ns, int sign) { if(sign < 0) p->transform = &ffts_execute_nd_real; else p->transform = &ffts_execute_nd_real_inv; - p->destroy = &ffts_free_nd; + p->destroy = &ffts_free_nd_real; p->rank = rank; p->Ns = malloc(sizeof(size_t) * rank); |