Fix a leak in SchurComplementSolver. cholmod_lhs was not being freed before the SolveImpl function returned if the underlying linear solver failed. Change-Id: Id45db4f69a2821e43dc00fc975718584d426f44d
diff --git a/internal/ceres/schur_complement_solver.cc b/internal/ceres/schur_complement_solver.cc index 2f407fd..d3eef5d 100644 --- a/internal/ceres/schur_complement_solver.cc +++ b/internal/ceres/schur_complement_solver.cc
@@ -330,7 +330,10 @@ } summary.termination_type = - ss_.Cholesky(cholmod_lhs, factor_, &summary.message); + ss_.Cholesky(cholmod_lhs, factor_, &summary.message); + + ss_.Free(cholmod_lhs); + if (summary.termination_type != LINEAR_SOLVER_SUCCESS) { return summary; } @@ -340,7 +343,6 @@ cholmod_dense* cholmod_solution = ss_.Solve(factor_, cholmod_rhs, &summary.message); - ss_.Free(cholmod_lhs); ss_.Free(cholmod_rhs); if (cholmod_solution == NULL) {