summaryrefslogtreecommitdiffstats
path: root/src/ffts_real_nd.c
diff options
context:
space:
mode:
author= <henry.gouk@gmail.com>2013-06-01 05:01:10 +1200
committer= <henry.gouk@gmail.com>2013-06-01 05:01:10 +1200
commitd0627195cf57b5b7090d46b63b17f879abd044b2 (patch)
treec8b3f53537cf0cac8c618130388df1de648934fd /src/ffts_real_nd.c
parent02f01b1e13846f30b23267b543f46957cdc030d9 (diff)
downloadffts-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.c25
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);
OpenPOWER on IntegriCloud