- use index-based iterating in LDDocument::closeUnused because deleting documents while iterating over g_loadedFiles causes the iterator to become invalidated

Sun, 06 Apr 2014 01:26:04 +0300

author
Santeri Piippo <crimsondusk64@gmail.com>
date
Sun, 06 Apr 2014 01:26:04 +0300
changeset 656
2a1c204df14d
parent 655
b376645315ab
child 657
5cfbf4dffebf
child 707
c89b58ba266b

- use index-based iterating in LDDocument::closeUnused because deleting documents while iterating over g_loadedFiles causes the iterator to become invalidated

src/ldDocument.cc file | annotate | diff | comparison | revisions
--- a/src/ldDocument.cc	Sat Mar 29 05:26:10 2014 +0200
+++ b/src/ldDocument.cc	Sun Apr 06 01:26:04 2014 +0300
@@ -1151,9 +1151,13 @@
 //
 void LDDocument::closeUnused()
 {
-	for (LDDocument* file : g_loadedFiles)
+	for (int i = 0; i < g_loadedFiles.size(); ++i)
+	{
+		LDDocument* file = g_loadedFiles[i];
+
 		if (file->isImplicit() && file->references().isEmpty())
-			delete file;
+			delete g_loadedFiles[i--];
+	}
 }
 
 // =============================================================================

mercurial