From 604b6e4337fe0e1d7488aebf439afcce5c246f62 Mon Sep 17 00:00:00 2001 From: Kenneth Hsu Date: Sat, 7 Oct 2017 09:49:46 -0700 Subject: [PATCH] Dispose enumerators after manually iterating over elements. Since the IEnumerator interface implements IDisposable, we should make sure to dispose of the enumerator when manually iterating over the elements. --- .../Main/Database/LocalRepairDatabase.cs | 20 ++++++++++--------- .../Main/Volumes/FilesetVolumeWriter.cs | 16 ++++++++------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Duplicati/Library/Main/Database/LocalRepairDatabase.cs b/Duplicati/Library/Main/Database/LocalRepairDatabase.cs index fa6458a00..ed4236980 100644 --- a/Duplicati/Library/Main/Database/LocalRepairDatabase.cs +++ b/Duplicati/Library/Main/Database/LocalRepairDatabase.cs @@ -558,17 +558,19 @@ ORDER BY " ,blocksize, blockhashlength); - var en = blocklist.GetEnumerator(); - foreach(var r in cmd.ExecuteReaderEnumerable(query, hash, length)) + using (var en = blocklist.GetEnumerator()) { - if (!en.MoveNext()) - throw new Exception(string.Format("Too few entries in source blocklist with hash {0}", hash)); - if (en.Current != r.GetString(0)) - throw new Exception(string.Format("Mismatch in blocklist with hash {0}", hash)); - } + foreach (var r in cmd.ExecuteReaderEnumerable(query, hash, length)) + { + if (!en.MoveNext()) + throw new Exception(string.Format("Too few entries in source blocklist with hash {0}", hash)); + if (en.Current != r.GetString(0)) + throw new Exception(string.Format("Mismatch in blocklist with hash {0}", hash)); + } - if (en.MoveNext()) - throw new Exception(string.Format("Too many source blocklist entries in {0}", hash)); + if (en.MoveNext()) + throw new Exception(string.Format("Too many source blocklist entries in {0}", hash)); + } } } } diff --git a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs index 83b2eddb0..7fb76a585 100644 --- a/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs +++ b/Duplicati/Library/Main/Volumes/FilesetVolumeWriter.cs @@ -83,15 +83,17 @@ namespace Duplicati.Library.Main.Volumes if (blocklisthashes != null) { //Slightly akward, but we avoid writing if there are no entries - var en = blocklisthashes.GetEnumerator(); - if (en.MoveNext() && !string.IsNullOrEmpty(en.Current)) + using (var en = blocklisthashes.GetEnumerator()) { - m_writer.WritePropertyName("blocklists"); - m_writer.WriteStartArray(); - m_writer.WriteValue(en.Current); - while (en.MoveNext()) + if (en.MoveNext() && !string.IsNullOrEmpty(en.Current)) + { + m_writer.WritePropertyName("blocklists"); + m_writer.WriteStartArray(); m_writer.WriteValue(en.Current); - m_writer.WriteEndArray(); + while (en.MoveNext()) + m_writer.WriteValue(en.Current); + m_writer.WriteEndArray(); + } } } else if (!string.IsNullOrWhiteSpace(blockhash))