Do not create a SparseCholesky object when not needed.
SchurComplementSolver implements a variant of ITERATIVE_SCHUR
when explicit_schur_complement is set to true. In this case
the SparseCholesky object should not be instantiated. Even
though there is no CPU cost, it can be the case that ITERATIVE_SCHUR
is being used when there are not sparse linear algebra libraries
are available, and this can result in a crash.
Change-Id: I349d5f79201782689b3ab0ccc2c5001804b44c7b
diff --git a/internal/ceres/schur_complement_solver.cc b/internal/ceres/schur_complement_solver.cc
index fa921b4..1a1becb 100644
--- a/internal/ceres/schur_complement_solver.cc
+++ b/internal/ceres/schur_complement_solver.cc
@@ -226,9 +226,11 @@
SparseSchurComplementSolver::SparseSchurComplementSolver(
const LinearSolver::Options& options)
: SchurComplementSolver(options) {
- sparse_cholesky_.reset(
- SparseCholesky::Create(options.sparse_linear_algebra_library_type,
- options.use_postordering ? AMD : NATURAL));
+ if (options.type != ITERATIVE_SCHUR) {
+ sparse_cholesky_.reset(
+ SparseCholesky::Create(options.sparse_linear_algebra_library_type,
+ options.use_postordering ? AMD : NATURAL));
+ }
}
SparseSchurComplementSolver::~SparseSchurComplementSolver() {