This is an automated email from the ASF dual-hosted git repository. nightowl888 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit b423f2b1f20599db415b5a4dc02ab43a71bd61eb Author: Shad Storhaug <[email protected]> AuthorDate: Mon Nov 21 11:17:15 2022 +0700 Lucene.Net.Tests.Store.TestRAMDirectory: Fixed teardown to retry file deletion if they are locked by another process. --- src/Lucene.Net.Tests/Store/TestRAMDirectory.cs | 32 +++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Lucene.Net.Tests/Store/TestRAMDirectory.cs b/src/Lucene.Net.Tests/Store/TestRAMDirectory.cs index 2ec2ce34e..58d11a2e9 100644 --- a/src/Lucene.Net.Tests/Store/TestRAMDirectory.cs +++ b/src/Lucene.Net.Tests/Store/TestRAMDirectory.cs @@ -1,8 +1,10 @@ using J2N.Threading; using Lucene.Net.Documents; using Lucene.Net.Index.Extensions; +using Lucene.Net.Support.IO; using NUnit.Framework; using System; +using System.Collections.Generic; using System.IO; using Assert = Lucene.Net.TestFramework.Assert; @@ -202,9 +204,37 @@ namespace Lucene.Net.Store private void RmDir(DirectoryInfo dir) { FileInfo[] files = dir.GetFiles(); + List<FileInfo> retryFiles = null; for (int i = 0; i < files.Length; i++) { - files[i].Delete(); + try + { + files[i].Delete(); + } + catch (IOException) + { + // LUCENENET specific - we can get here if Windows stil has a lock on the file. We will put it into a list to retry. + if (retryFiles is null) retryFiles = new List<FileInfo>(); + retryFiles.Add(files[i]); + } + } + // LUCENENET specific - retry the deletion if it failed on the first pass + if (retryFiles is not null) + { + // Second pass - if this attempt doesn't work, just give up. + foreach (var file in retryFiles) + { + try + { + file.Delete(); + } + catch { /* ignore */ } + } + if (retryFiles.Count == 0) + { + dir.Delete(); + } + return; } dir.Delete(); }
