stack-of-tasks/tsid

Memory leaks?

Closed this issue · 11 comments

Hi

It seems that TSID is leaking quite a lot of memory. Valgrind says that for the tests/tsid-formulation:

==59085== LEAK SUMMARY:
==59085==    definitely lost: 229,104 bytes in 17 blocks
==59085==    indirectly lost: 2,912,485 bytes in 1,897 blocks
==59085==      possibly lost: 6,816 bytes in 1 blocks
==59085==    still reachable: 72,704 bytes in 1 blocks
==59085==         suppressed: 0 bytes in 0 blocks
==59085== Reachable blocks (those to which a pointer was found) are not shown.
==59085== To see them, rerun with: --leak-check=full --show-leak-kinds=all

=> so, about 2Mb for the test (it might look like nothing, but our code create TSID objects about 50-100k times, which means about 100Gb can be lost!

See the full report below. From a quick look, it seems that the tsid formulation calls many new, but no delete (see https://github.com/stack-of-tasks/tsid/blob/master/src/formulations/inverse-dynamics-formulation-acc-force.cpp).

=> is it "normal"? It would not be hard to call delete in the destructor or put everything in shared_ptr, I guess.

==59754== Memcheck, a memory error detector
==59754== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==59754== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==59754== Command: tests/tsid-formulation
==59754== 
Running 4 test cases...

*** test_invdyn_formulation_acc_force_remove_contact ***
q: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[SolverHQuadProg.solver-eiquadprog] Resizing equality constraints from 0 to 18
[SolverHQuadProg.solver-eiquadprog] Resizing inequality constraints from 0 to 71
[SolverHQuadProg.solver-eiquadprog] Resizing Hessian from 0 to 61
Level 0
 - base-dynamics: w=1, equality, 6x61
 - contact_rfoot_motion_task: w=1, equality, 6x61
 - contact_rfoot_force_constraint: w=1, inequality, 17x61
 - contact_lfoot_motion_task: w=1, equality, 6x61
 - contact_lfoot_force_constraint: w=1, inequality, 17x61
 - task-joint-bounds: w=1, inequality, 37x61
Level 1
 - contact_rfoot_force_reg_task: w=1e-05, equality, 6x61
 - contact_lfoot_force_reg_task: w=1e-05, equality, 6x61
 - task-com: w=1, equality, 3x61
 - task-posture: w=0.01, equality, 31x61
 - task-right-foot: w=1000, equality, 6x61

Time 0
  contact_rfoot force: 392.616 	  contact_lfoot force: 5 	task-com err: 0.1 	v=0	 dv=10.1726

### TEST FINISHED ###
v(37x1): [ 0.0006,     0.2,  -0.004,   2e-06, -0.0004,    0.03,   -0.03,    -0.3,  -0.003,   3e-05,   0.003,     0.3,   -0.03,    -0.3,   0.005, -0.0002,  -0.005,     0.3,    0.05,  -0.006,    0.02,   5e-05,   0.006,   2e-05,  0.0007,  -9e-05,   0.001,  -1e-05, -0.0001, -0.0006,   0.002,    0.02,   3e-05,   0.006,   3e-05,  0.0007,  -7e-05]
Final   CoM position:  0.0219732 0.00825469   0.665849
Desired CoM position: 0.0219541       0.1  0.665915

*** test_invdyn_formulation_acc_force ***
q: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[SolverHQuadProg.solver-eiquadprog] Resizing equality constraints from 0 to 18
[SolverHQuadProg.solver-eiquadprog] Resizing inequality constraints from 0 to 71
[SolverHQuadProg.solver-eiquadprog] Resizing Hessian from 0 to 61
nVar 61
nEq 18
nIn 71
Initial CoM position:    0.0219541 -3.46945e-18     0.665915
Initial RF position:   R =
1 0 0
0 1 0
0 0 1
  p =       0  -0.096 0.02996

Initial LF position:   R =
1 0 0
0 1 0
0 0 1
  p =       0   0.096 0.02996

Level 0
 - base-dynamics: w=1, equality, 6x61
 - contact_rfoot_motion_task: w=1, equality, 6x61
 - contact_rfoot_force_constraint: w=1, inequality, 17x61
 - contact_lfoot_motion_task: w=1, equality, 6x61
 - contact_lfoot_force_constraint: w=1, inequality, 17x61
 - task-joint-bounds: w=1, inequality, 37x61
Level 1
 - contact_rfoot_force_reg_task: w=1e-05, equality, 6x61
 - contact_lfoot_force_reg_task: w=1e-05, equality, 6x61
 - task-com: w=1, equality, 3x61
 - task-posture: w=0.01, equality, 31x61

Time 0
  contact_rfoot err: 0 	contact_lfoot err: 0 	task-com err: 0.1 	task-posture err: 0 	v=0	 dv=0
dv(37x1): [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

### TEST FINISHED ###
v(37x1): [ 0.0001,    0.03,  -6e-06,   1e-09,  0.0002,   0.004,  -0.004,   -0.05, -0.0006, -0.0001,  0.0005,    0.05,  -0.004,   -0.05,  0.0005, -0.0001, -0.0006,    0.05,   0.007, -0.0009,   0.003,   1e-05,  0.0009,   4e-06,  0.0001,  -1e-05,  0.0002,   1e-05,  -8e-06,  -3e-05,  0.0006,   0.003,   8e-06,  0.0009,   4e-06,  0.0001,   4e-06]
Final   CoM position:   0.0219545 0.000104108    0.665915
Desired CoM position: 0.0219541       0.1  0.665915

*** test_contact_point_invdyn_formulation_acc_force ***
[SolverHQuadProg.solver-eiquadprog] Resizing equality constraints from 0 to 18
[SolverHQuadProg.solver-eiquadprog] Resizing inequality constraints from 0 to 20
[SolverHQuadProg.solver-eiquadprog] Resizing Hessian from 0 to 26
[SolverHQuadProg.solver-eiquadprog] Resizing equality constraints from 18 to 6
contact_BL_contact force:  -1.226e-17 -7.58874e-09       7.0775
contact_BR_contact force:  -1.226e-17 -7.58874e-09       7.0775
contact_FL_contact force: 1.22461e-17 -7.58874e-09      6.51916
contact_FR_contact force:  1.2246e-17 -7.58874e-09      6.51916

### TEST FINISHED ###
v(14x1): [ 1e-22,  2e-10, -2e-09,  1e-05,  4e-22,  4e-23, -3e-05,  4e-05, -3e-05,  4e-05,  7e-06, -4e-05,  7e-06, -4e-05]
Final   CoM position:         0.1 -0.00821487    0.266836
Desired CoM position:         0.1 -0.00821487    0.266836

*** test_invdyn_formulation_acc_force_computation_time ***
q: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[SolverHQuadProg.eiquadprog] Resizing equality constraints from 0 to 18
[SolverHQuadProg.eiquadprog] Resizing inequality constraints from 0 to 71
[SolverHQuadProg.eiquadprog] Resizing Hessian from 0 to 61
[SolverHQuadProgFast.eiquadprog-fast] Resizing equality constraints from 0 to 18
[SolverHQuadProgFast.eiquadprog-fast] Resizing inequality constraints from 0 to 71
[SolverHQuadProgFast.eiquadprog-fast] Resizing Hessian from 0 to 61

### TEST FINISHED ###

*** PROFILING RESULTS [ms]                                  min        avg        max        lastTime   nSamples   totalTime  ***
Control cycle                                               1610.710   1623.882   1651.931   1610.916   10         16238.818 
HQP                                                         589.302    598.845    606.936    593.080    10         5988.451  
HQP_FAST                                                    604.893    631.785    735.278    614.590    10         6317.847  
HQP_RT                                                      4107.444   4287.081   5010.367   4107.837   10         42870.812 
Problem formulation                                         1016.642   1023.382   1048.339   1017.208   10         10233.820 

*** STATISTICS (min - avg - max - last - nSamples - total) ***
active inequalities                                         16.0	17.2	18.0	16.0	10	172.0
solver iterations                                           18.0	19.2	20.0	18.0	10	192.0

*** No errors detected
==59754== 
==59754== HEAP SUMMARY:
==59754==     in use at exit: 3,221,109 bytes in 1,916 blocks
==59754==   total heap usage: 120,783 allocs, 118,867 frees, 25,570,004 bytes allocated
==59754== 
==59754== 176 (104 direct, 72 indirect) bytes in 1 blocks are definitely lost in loss record 311 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1DE8: tsid::trajectories::TrajectoryEuclidianConstant::operator new(unsigned long) (trajectory-euclidian.hpp:31)
==59754==    by 0x78D8E4: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact::test_method() (tsid-formulation.cpp:235)
==59754==    by 0x78D3FF: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact_invoker() (tsid-formulation.cpp:197)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 176 (104 direct, 72 indirect) bytes in 1 blocks are definitely lost in loss record 312 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1DE8: tsid::trajectories::TrajectoryEuclidianConstant::operator new(unsigned long) (trajectory-euclidian.hpp:31)
==59754==    by 0x7926A6: tsid_formulationTest::test_invdyn_formulation_acc_force::test_method() (tsid-formulation.cpp:350)
==59754==    by 0x79249E: tsid_formulationTest::test_invdyn_formulation_acc_force_invoker() (tsid-formulation.cpp:329)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 176 (104 direct, 72 indirect) bytes in 1 blocks are definitely lost in loss record 313 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1DE8: tsid::trajectories::TrajectoryEuclidianConstant::operator new(unsigned long) (trajectory-euclidian.hpp:31)
==59754==    by 0x7993B5: tsid_formulationTest::test_contact_point_invdyn_formulation_acc_force::test_method() (tsid-formulation.cpp:552)
==59754==    by 0x798A0B: tsid_formulationTest::test_contact_point_invdyn_formulation_acc_force_invoker() (tsid-formulation.cpp:492)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 176 (104 direct, 72 indirect) bytes in 1 blocks are definitely lost in loss record 314 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1DE8: tsid::trajectories::TrajectoryEuclidianConstant::operator new(unsigned long) (trajectory-euclidian.hpp:31)
==59754==    by 0x79D400: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time::test_method() (tsid-formulation.cpp:673)
==59754==    by 0x79D21D: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time_invoker() (tsid-formulation.cpp:655)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 296 bytes in 1 blocks are possibly lost in loss record 391 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7B0B8A: double* Eigen::internal::conditional_aligned_new_auto<double, true>(unsigned long) (Memory.h:462)
==59754==    by 0x7A9AC3: Eigen::DenseStorage<double, -1, -1, 1, 0>::resize(long, long, long) (DenseStorage.h:550)
==59754==    by 0x7BA8B7: Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >::resize(long, long) (PlainObjectBase.h:266)
==59754==    by 0x7BC6B3: void Eigen::internal::call_assignment_no_alias<Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >, Eigen::internal::assign_op<double> >(Eigen::Matrix<double, -1, 1, 0, -1, 1>&, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&, Eigen::internal::assign_op<double> const&) (AssignEvaluator.h:736)
==59754==    by 0x7B5B97: Eigen::Matrix<double, -1, 1, 0, -1, 1>& Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >::_set_noalias<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> > >(Eigen::DenseBase<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> > > const&) (PlainObjectBase.h:700)
==59754==    by 0x5B6C784: void Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >::_init1<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> >, Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> > >(Eigen::DenseBase<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> > > const&) (PlainObjectBase.h:783)
==59754==    by 0x5B6C326: Eigen::Matrix<double, -1, 1, 0, -1, 1>::Matrix<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> > >(Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, -1, 1, 0, -1, 1> > const&) (Matrix.h:296)
==59754==    by 0x5E04C1F: pinocchio::DataTpl<double, 0, pinocchio::JointCollectionDefaultTpl>::DataTpl(pinocchio::ModelTpl<double, 0, pinocchio::JointCollectionDefaultTpl> const&) (data.hxx:106)
==59754==    by 0x5DFEB58: tsid::InverseDynamicsFormulationAccForce::InverseDynamicsFormulationAccForce(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tsid::robots::RobotWrapper&, bool) (inverse-dynamics-formulation-acc-force.cpp:48)
==59754== 
==59754== 848 (104 direct, 744 indirect) bytes in 1 blocks are definitely lost in loss record 469 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1DE8: tsid::trajectories::TrajectoryEuclidianConstant::operator new(unsigned long) (trajectory-euclidian.hpp:31)
==59754==    by 0x78D9DB: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact::test_method() (tsid-formulation.cpp:239)
==59754==    by 0x78D3FF: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact_invoker() (tsid-formulation.cpp:197)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 848 (104 direct, 744 indirect) bytes in 1 blocks are definitely lost in loss record 470 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1DE8: tsid::trajectories::TrajectoryEuclidianConstant::operator new(unsigned long) (trajectory-euclidian.hpp:31)
==59754==    by 0x79279D: tsid_formulationTest::test_invdyn_formulation_acc_force::test_method() (tsid-formulation.cpp:354)
==59754==    by 0x79249E: tsid_formulationTest::test_invdyn_formulation_acc_force_invoker() (tsid-formulation.cpp:329)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 848 (104 direct, 744 indirect) bytes in 1 blocks are definitely lost in loss record 471 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1DE8: tsid::trajectories::TrajectoryEuclidianConstant::operator new(unsigned long) (trajectory-euclidian.hpp:31)
==59754==    by 0x79D4F7: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time::test_method() (tsid-formulation.cpp:677)
==59754==    by 0x79D21D: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time_invoker() (tsid-formulation.cpp:655)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 16,271 (296 direct, 15,975 indirect) bytes in 1 blocks are definitely lost in loss record 624 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x5C3EF21: tsid::solvers::SolverHQuadProg::operator new(unsigned long) (solver-HQP-eiquadprog.hpp:34)
==59754==    by 0x5C3EE77: tsid::solvers::SolverHQPFactory::createNewSolver(tsid::solvers::SolverHQP, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (solver-HQP-factory.cpp:35)
==59754==    by 0x79992D: tsid_formulationTest::test_contact_point_invdyn_formulation_acc_force::test_method() (tsid-formulation.cpp:580)
==59754==    by 0x798A0B: tsid_formulationTest::test_contact_point_invdyn_formulation_acc_force_invoker() (tsid-formulation.cpp:492)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 111,040 (296 direct, 110,744 indirect) bytes in 1 blocks are definitely lost in loss record 660 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x5C3EF21: tsid::solvers::SolverHQuadProg::operator new(unsigned long) (solver-HQP-eiquadprog.hpp:34)
==59754==    by 0x5C3EE77: tsid::solvers::SolverHQPFactory::createNewSolver(tsid::solvers::SolverHQP, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (solver-HQP-factory.cpp:35)
==59754==    by 0x79D596: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time::test_method() (tsid-formulation.cpp:682)
==59754==    by 0x79D21D: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time_invoker() (tsid-formulation.cpp:655)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 111,071 (296 direct, 110,775 indirect) bytes in 1 blocks are definitely lost in loss record 661 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x5C3EF21: tsid::solvers::SolverHQuadProg::operator new(unsigned long) (solver-HQP-eiquadprog.hpp:34)
==59754==    by 0x5C3EE77: tsid::solvers::SolverHQPFactory::createNewSolver(tsid::solvers::SolverHQP, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (solver-HQP-factory.cpp:35)
==59754==    by 0x78DA7A: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact::test_method() (tsid-formulation.cpp:244)
==59754==    by 0x78D3FF: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact_invoker() (tsid-formulation.cpp:197)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 111,071 (296 direct, 110,775 indirect) bytes in 1 blocks are definitely lost in loss record 662 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x5C3EF21: tsid::solvers::SolverHQuadProg::operator new(unsigned long) (solver-HQP-eiquadprog.hpp:34)
==59754==    by 0x5C3EE77: tsid::solvers::SolverHQPFactory::createNewSolver(tsid::solvers::SolverHQP, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (solver-HQP-factory.cpp:35)
==59754==    by 0x79283C: tsid_formulationTest::test_invdyn_formulation_acc_force::test_method() (tsid-formulation.cpp:359)
==59754==    by 0x79249E: tsid_formulationTest::test_invdyn_formulation_acc_force_invoker() (tsid-formulation.cpp:329)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 146,238 (4,512 direct, 141,726 indirect) bytes in 1 blocks are definitely lost in loss record 663 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1D14: tsid::InverseDynamicsFormulationAccForce::operator new(unsigned long) (inverse-dynamics-formulation-acc-force.hpp:73)
==59754==    by 0x798ED7: tsid_formulationTest::test_contact_point_invdyn_formulation_acc_force::test_method() (tsid-formulation.cpp:534)
==59754==    by 0x798A0B: tsid_formulationTest::test_contact_point_invdyn_formulation_acc_force_invoker() (tsid-formulation.cpp:492)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754==    by 0x6356DE1: boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) (unit_test_monitor.ipp:69)
==59754== 
==59754== 210,344 (208,512 direct, 1,832 indirect) bytes in 1 blocks are definitely lost in loss record 667 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7B05C2: tsid::solvers::SolverHQuadProgRT<61, 18, 71>::operator new(unsigned long) (solver-HQP-eiquadprog-rt.hpp:38)
==59754==    by 0x7A94CB: tsid::solvers::SolverHQPBase* tsid::solvers::SolverHQPFactory::createNewSolver<61, 18, 71>(tsid::solvers::SolverHQP, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (solver-HQP-factory.hxx:35)
==59754==    by 0x79D65C: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time::test_method() (tsid-formulation.cpp:687)
==59754==    by 0x79D21D: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time_invoker() (tsid-formulation.cpp:655)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 210,728 (632 direct, 210,096 indirect) bytes in 1 blocks are definitely lost in loss record 668 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x5C3EF56: tsid::solvers::SolverHQuadProgFast::operator new(unsigned long) (in /home/jmouret/deps/tsid/build/libtsid.so.1.4.0)
==59754==    by 0x5C3EE9E: tsid::solvers::SolverHQPFactory::createNewSolver(tsid::solvers::SolverHQP, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (solver-HQP-factory.cpp:38)
==59754==    by 0x79D5F9: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time::test_method() (tsid-formulation.cpp:684)
==59754==    by 0x79D21D: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time_invoker() (tsid-formulation.cpp:655)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 738,782 (4,512 direct, 734,270 indirect) bytes in 1 blocks are definitely lost in loss record 670 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1D14: tsid::InverseDynamicsFormulationAccForce::operator new(unsigned long) (inverse-dynamics-formulation-acc-force.hpp:73)
==59754==    by 0x7A2CB2: tsid_formulationTest::StandardRomeoInvDynCtrl::StandardRomeoInvDynCtrl(double) (tsid-formulation.cpp:131)
==59754==    by 0x792535: tsid_formulationTest::test_invdyn_formulation_acc_force::test_method() (tsid-formulation.cpp:337)
==59754==    by 0x79249E: tsid_formulationTest::test_invdyn_formulation_acc_force_invoker() (tsid-formulation.cpp:329)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 739,078 (4,512 direct, 734,566 indirect) bytes in 1 blocks are definitely lost in loss record 671 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1D14: tsid::InverseDynamicsFormulationAccForce::operator new(unsigned long) (inverse-dynamics-formulation-acc-force.hpp:73)
==59754==    by 0x7A2CB2: tsid_formulationTest::StandardRomeoInvDynCtrl::StandardRomeoInvDynCtrl(double) (tsid-formulation.cpp:131)
==59754==    by 0x79D2AB: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time::test_method() (tsid-formulation.cpp:662)
==59754==    by 0x79D21D: tsid_formulationTest::test_invdyn_formulation_acc_force_computation_time_invoker() (tsid-formulation.cpp:655)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== 750,238 (4,512 direct, 745,726 indirect) bytes in 1 blocks are definitely lost in loss record 672 of 672
==59754==    at 0x4C2DF66: malloc (vg_replace_malloc.c:307)
==59754==    by 0x7A0356: Eigen::internal::aligned_malloc(unsigned long) (Memory.h:224)
==59754==    by 0x7A48AF: void* Eigen::internal::conditional_aligned_malloc<true>(unsigned long) (Memory.h:305)
==59754==    by 0x7A1D14: tsid::InverseDynamicsFormulationAccForce::operator new(unsigned long) (inverse-dynamics-formulation-acc-force.hpp:73)
==59754==    by 0x7A2CB2: tsid_formulationTest::StandardRomeoInvDynCtrl::StandardRomeoInvDynCtrl(double) (tsid-formulation.cpp:131)
==59754==    by 0x78D4D1: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact::test_method() (tsid-formulation.cpp:208)
==59754==    by 0x78D3FF: tsid_formulationTest::test_invdyn_formulation_acc_force_remove_contact_invoker() (tsid-formulation.cpp:197)
==59754==    by 0x83DE4D: boost::unit_test::ut_detail::unused boost::unit_test::ut_detail::invoker<boost::unit_test::ut_detail::unused>::invoke<void (*)()>(void (*&)()) (callback.hpp:56)
==59754==    by 0x83B0E4: boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke() (callback.hpp:89)
==59754==    by 0x6356CB0: operator() (callback.hpp:118)
==59754==    by 0x6356CB0: operator() (unit_test_monitor.ipp:41)
==59754==    by 0x6356CB0: invoke<boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<> > > (callback.hpp:42)
==59754==    by 0x6356CB0: boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() (callback.hpp:89)
==59754==    by 0x6336995: operator() (callback.hpp:118)
==59754==    by 0x6336995: do_invoke<boost::scoped_ptr<boost::detail::translate_exception_base>, boost::unit_test::callback0<int> > (execution_monitor.ipp:281)
==59754==    by 0x6336995: boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:885)
==59754==    by 0x63371B2: boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) (execution_monitor.ipp:1211)
==59754== 
==59754== LEAK SUMMARY:
==59754==    definitely lost: 229,104 bytes in 17 blocks
==59754==    indirectly lost: 2,919,005 bytes in 1,897 blocks
==59754==      possibly lost: 296 bytes in 1 blocks
==59754==    still reachable: 72,704 bytes in 1 blocks
==59754==         suppressed: 0 bytes in 0 blocks
==59754== Reachable blocks (those to which a pointer was found) are not shown.
==59754== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==59754== 
==59754== For lists of detected and suppressed errors, rerun with: -s
==59754== ERROR SUMMARY: 18 errors from 18 contexts (suppressed: 0 from 0)

Hi @jbmouret, and thanks for this report and investigation.

I totally agree, we should use more shared_ptr.

I could handle this task, but not soon, so if anyone wants to help a bit on that, this would be really welcome :)

OK, I will put it in my (long) TODO list.

Agreed. When I first implemented TSID I didn't have in mind this use-case, so I didn't take care of deallocating memory. My bad. Unfortunately now that the semester started I'm also very busy, so I don't know when I could find the time to do it. Worst case could be January for me.

@andreadelprete OK. At least I know that there is no secret deallocator :) I will try to work on this and submit a PL.

Is there a reason for not compiling in c++11 ? (14 or 17 would be even better). We do not have shared_ptr in std:: in c++98, except if we use boost.

Since URDFDOM >= 1.0.0, we have to rely on C++11 at the Pinocchio level. So, except if @nim65s or @olivier-stasse or @andreadelprete do not agree, we may go toward std::shared_ptr and C++11. But boost::shared_ptr remains a good candidate I would say.

Until this month, our TALOS was in 16.04 LTS. And by default 16.04 LTS is in C++98. We had several problems with some boost libraries such as boost::variant not behaving nicely when mixing C++98 and C++11. But all of our robots are now at least on 18.04 LTS. So I am fine with C++11.

I've moved all the pointers to shared_ptr and there is no leak anymore! (and yes, this means c++11)

=56088== LEAK SUMMARY:
==56088==    definitely lost: 0 bytes in 0 blocks
==56088==    indirectly lost: 0 bytes in 0 blocks
==56088==      possibly lost: 0 bytes in 0 blocks

https://github.com/resibots/tsid/tree/fix_leaks

I still need to have a look at the python interface, as we usually do not attempt to compile it.

It looks nice. Thanks.

I am fine with the switch to c++11

closed by #112