From 5ce5189437fbf5839ece60e9a1a480eed0486272 Mon Sep 17 00:00:00 2001
From: Joan Sola <jsola@iri.upc.edu>
Date: Wed, 21 Sep 2022 15:12:30 +0200
Subject: [PATCH] Add isRemoving() protections to getFactorList()

---
 src/capture/capture_base.cpp       | 6 ++++--
 src/frame/frame_base.cpp           | 6 ++++--
 src/trajectory/trajectory_base.cpp | 6 ++++--
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/capture/capture_base.cpp b/src/capture/capture_base.cpp
index e6d4a1e66..a154cdbb4 100644
--- a/src/capture/capture_base.cpp
+++ b/src/capture/capture_base.cpp
@@ -158,13 +158,15 @@ FactorBasePtrList CaptureBase::getFactorList()
 void CaptureBase::getFactorList(FactorBaseConstPtrList& _fac_list) const
 {
     for (auto f_ptr : getFeatureList())
-        f_ptr->getFactorList(_fac_list);
+        if (not f_ptr->isRemoving())
+            f_ptr->getFactorList(_fac_list);
 }
 
 void CaptureBase::getFactorList(FactorBasePtrList& _fac_list)
 {
     for (auto f_ptr : getFeatureList())
-        f_ptr->getFactorList(_fac_list);
+        if (not f_ptr->isRemoving())
+            f_ptr->getFactorList(_fac_list);
 }
 
 FactorBasePtr CaptureBase::addConstrainedBy(FactorBasePtr _fac_ptr)
diff --git a/src/frame/frame_base.cpp b/src/frame/frame_base.cpp
index aae21b6eb..390d6d510 100644
--- a/src/frame/frame_base.cpp
+++ b/src/frame/frame_base.cpp
@@ -351,13 +351,15 @@ FactorBasePtrList FrameBase::getFactorList()
 void FrameBase::getFactorList(FactorBaseConstPtrList& _fac_list) const
 {
     for (auto c_ptr : getCaptureList())
-        c_ptr->getFactorList(_fac_list);
+        if (not c_ptr->isRemoving())
+            c_ptr->getFactorList(_fac_list);
 }
 
 void FrameBase::getFactorList(FactorBasePtrList& _fac_list)
 {
     for (auto c_ptr : getCaptureList())
-        c_ptr->getFactorList(_fac_list);
+        if (not c_ptr->isRemoving())
+            c_ptr->getFactorList(_fac_list);
 }
 
 bool FrameBase::hasCapture(const CaptureBaseConstPtr& _capture) const
diff --git a/src/trajectory/trajectory_base.cpp b/src/trajectory/trajectory_base.cpp
index 24de3de29..244d6a505 100644
--- a/src/trajectory/trajectory_base.cpp
+++ b/src/trajectory/trajectory_base.cpp
@@ -54,13 +54,15 @@ void TrajectoryBase::removeFrame(FrameBasePtr _frame_ptr)
 void TrajectoryBase::getFactorList(FactorBaseConstPtrList & _fac_list) const
 {
 	for(auto fr_pair: frame_map_)
-		fr_pair.second->getFactorList(_fac_list);
+        if (not fr_pair.second->isRemoving())
+	    	fr_pair.second->getFactorList(_fac_list);
 }
 
 void TrajectoryBase::getFactorList(FactorBasePtrList & _fac_list)
 {
 	for(auto fr_pair: frame_map_)
-		fr_pair.second->getFactorList(_fac_list);
+        if (not fr_pair.second->isRemoving())
+    		fr_pair.second->getFactorList(_fac_list);
 }
 
 TimeStamp TrajectoryBase::closestTimeStampToTimeStamp(const TimeStamp& _ts) const
-- 
GitLab