[Debtags-commits] [svn] r2080 - in tagcoll/2.0: . tools

Enrico Zini enrico at alioth.debian.org
Fri Nov 17 20:31:02 CET 2006


Author: enrico
Date: Fri Nov 17 20:31:02 2006
New Revision: 2080

Modified:
   tagcoll/2.0/   (props changed)
   tagcoll/2.0/tools/tagcoll.cc
Log:
 r3651 at viaza:  enrico | 2006-11-17 20:30:22 +0100
 Deallocate things in reverse allocation order, to try and preserve filter connections during execution of destructors


Modified: tagcoll/2.0/tools/tagcoll.cc
==============================================================================
--- tagcoll/2.0/tools/tagcoll.cc	(original)
+++ tagcoll/2.0/tools/tagcoll.cc	Fri Nov 17 20:31:02 2006
@@ -362,19 +362,26 @@
 
 class FilterStepManager
 {
-	std::set<FilterStep*> m_managed;
+	// Use a vector to be able to deallocate in reverse order
+	std::vector<FilterStep*> m_managed;
 public:
 	~FilterStepManager()
 	{
-		for (std::set<FilterStep*>::const_iterator i = m_managed.begin();
-				i != m_managed.end(); ++i)
+		for (std::vector<FilterStep*>::const_reverse_iterator i = m_managed.rbegin();
+				i != m_managed.rend(); ++i)
 			if (*i)
 				delete *i;
 	}
 
 	FilterStep* manage(FilterStep* fs)
 	{
-		m_managed.insert(fs);
+		// Avoid double insert
+		for (std::vector<FilterStep*>::const_iterator i = m_managed.begin();
+				i != m_managed.end(); ++i)
+			if (*i == fs)
+				return fs;
+
+		m_managed.push_back(fs);
 		return fs;
 	}
 };



More information about the Debtags-commits mailing list