diff options
author | regnat <rg@regnat.ovh> | 2018-02-07 14:51:38 +0100 |
---|---|---|
committer | regnat <rg@regnat.ovh> | 2018-02-07 15:09:36 +0100 |
commit | 594a77198f154de54f5aa3395b22b2536a9ecc4c (patch) | |
tree | ad683cd8246cfc7e770cfca07aa788795bfdeac8 /packages/gsl/src/Numeric/GSL | |
parent | 8cb879a4ad83656bc70652957a08113e2b784886 (diff) |
GSL.ODE: free the jacobian after use
When calling the function `Numeric.GSL.ODE.odeSolveVWith'` and provide a
jacobian, a pointer to this jacobian is registered (at
https://github.com/albertoruiz/hmatrix/blob/8cb879a4ad83656bc70652957a08113e2b784886/packages/gsl/src/Numeric/GSL/ODE.hs#L146-L148), but never freed, which causes a memory leak.
This commits adds a call to `freeHaskellFunPtr` when needed at the end
of the function to fix this.
Diffstat (limited to 'packages/gsl/src/Numeric/GSL')
-rw-r--r-- | packages/gsl/src/Numeric/GSL/ODE.hs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/packages/gsl/src/Numeric/GSL/ODE.hs b/packages/gsl/src/Numeric/GSL/ODE.hs index c4fab85..987d47e 100644 --- a/packages/gsl/src/Numeric/GSL/ODE.hs +++ b/packages/gsl/src/Numeric/GSL/ODE.hs | |||
@@ -152,6 +152,7 @@ odeSolveVWith' method mbjac control epsAbs epsRel aX aX' mbsc h f xiv ts = | |||
152 | // sc' // xiv' // ts' ) | 152 | // sc' // xiv' // ts' ) |
153 | "ode" | 153 | "ode" |
154 | freeHaskellFunPtr fp | 154 | freeHaskellFunPtr fp |
155 | if (jp /= nullFunPtr) then freeHaskellFunPtr jp else pure () | ||
155 | return sol | 156 | return sol |
156 | 157 | ||
157 | foreign import ccall safe "ode" | 158 | foreign import ccall safe "ode" |