[Bf-blender-cvs] [df5b65811e4] master: Libmv: Fix memory leak in modal solver

Sergey Sharybin noreply at git.blender.org
Mon Oct 12 15:12:21 CEST 2020


Commit: df5b65811e4ebbe02524c94defdf7be4ae0275ba
Author: Sergey Sharybin
Date:   Mon Oct 12 10:46:31 2020 +0200
Branches: master
https://developer.blender.org/rBdf5b65811e4ebbe02524c94defdf7be4ae0275ba

Libmv: Fix memory leak in modal solver

The leak was happening when problem did not have any parameters blocks
defined. This happens, for example, if there are no 3D points at all,
or when all markers are set to 0 weight.

Was noticeable in libmv_modal_solver_test when building with LSAN
enabled.

===================================================================

M	intern/libmv/libmv/simple_pipeline/modal_solver.cc

===================================================================

diff --git a/intern/libmv/libmv/simple_pipeline/modal_solver.cc b/intern/libmv/libmv/simple_pipeline/modal_solver.cc
index 6c1a983df35..f801518271c 100644
--- a/intern/libmv/libmv/simple_pipeline/modal_solver.cc
+++ b/intern/libmv/libmv/simple_pipeline/modal_solver.cc
@@ -175,8 +175,9 @@ void ModalSolver(const Tracks &tracks,
     // STEP 2: Refine rotation with Ceres.
     ceres::Problem problem;
 
-    ceres::LocalParameterization* quaternion_parameterization =
-        new ceres::QuaternionParameterization;
+    // NOTE: Parameterization is lazily initialized when it is really needed,
+    // and is re-used by all parameters block.
+    ceres::LocalParameterization* quaternion_parameterization = NULL;
 
     int num_residuals = 0;
     for (int i = 0; i < all_markers.size(); ++i) {
@@ -195,6 +196,10 @@ void ModalSolver(const Tracks &tracks,
             &quaternion(0));
         num_residuals++;
 
+        if (quaternion_parameterization == NULL) {
+          quaternion_parameterization = new ceres::QuaternionParameterization();
+        }
+
         problem.SetParameterization(&quaternion(0),
                                     quaternion_parameterization);
       }



More information about the Bf-blender-cvs mailing list