]> git.sesse.net Git - foosball/commitdiff
"Fix" a memory leak.
authorSteinar H. Gunderson <sesse@debian.org>
Sun, 9 Dec 2007 15:34:37 +0000 (16:34 +0100)
committerSteinar H. Gunderson <sesse@debian.org>
Sun, 9 Dec 2007 15:34:37 +0000 (16:34 +0100)
foosrank.cpp

index b9208fd86b230e1ec950447f66f508d99ea00351..03edcb5b4c1047572a644aa4122af70e288c32f7 100644 (file)
@@ -106,27 +106,31 @@ static void compute_opponent_rating_pdf(int k, int a, double mu2, double sigma2,
        int sz = (6000.0 - 0.0) / int_step_size;
        double h = (6000.0 - 0.0) / sz;
 
-       fftw_plan f1, f2, b;
-       complex<double> *func1, *func2, *res;
-
-       func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
-       func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
-       res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
-       f1 = fftw_plan_dft_1d(sz*2,
-               reinterpret_cast<fftw_complex*>(func1),
-               reinterpret_cast<fftw_complex*>(func1),
-               FFTW_FORWARD,
-               FFTW_MEASURE);
-       f2 = fftw_plan_dft_1d(sz*2,
-               reinterpret_cast<fftw_complex*>(func2),
-               reinterpret_cast<fftw_complex*>(func2),
-               FFTW_FORWARD,
-               FFTW_MEASURE);
-       b = fftw_plan_dft_1d(sz*2,
-               reinterpret_cast<fftw_complex*>(res),
-               reinterpret_cast<fftw_complex*>(res),
-               FFTW_BACKWARD,
-               FFTW_MEASURE);
+       static bool inited = false;
+       static fftw_plan f1, f2, b;
+       static complex<double> *func1, *func2, *res;
+
+       if (!inited) {
+               func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+               func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+               res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+               f1 = fftw_plan_dft_1d(sz*2,
+                       reinterpret_cast<fftw_complex*>(func1),
+                       reinterpret_cast<fftw_complex*>(func1),
+                       FFTW_FORWARD,
+                       FFTW_MEASURE);
+               f2 = fftw_plan_dft_1d(sz*2,
+                       reinterpret_cast<fftw_complex*>(func2),
+                       reinterpret_cast<fftw_complex*>(func2),
+                       FFTW_FORWARD,
+                       FFTW_MEASURE);
+               b = fftw_plan_dft_1d(sz*2,
+                       reinterpret_cast<fftw_complex*>(res),
+                       reinterpret_cast<fftw_complex*>(res),
+                       FFTW_BACKWARD,
+                       FFTW_MEASURE);
+               inited = true;
+       }
        
        // start off by zero
        for (int i = 0; i < sz*2; ++i) {