You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2019/07/09 21:29:42 UTC
[lucenenet] 26/29: BUG: Fixed invalid method call introduced in
#222 to ClearLock that caused the path to double up,
which caused the GetCanonicalPathOfLockFile method to fail.
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 7f2b76a0a81c3fbe7dd5e329cbf1d6504dba9e2c
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Tue Jul 9 22:17:03 2019 +0700
BUG: Fixed invalid method call introduced in #222 to ClearLock that caused the path to double up, which caused the GetCanonicalPathOfLockFile method to fail.
---
src/Lucene.Net.Tests/Store/TestLockFactory.cs | 2 +-
src/Lucene.Net/Store/NativeFSLockFactory.cs | 11 ++++++-----
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/Lucene.Net.Tests/Store/TestLockFactory.cs b/src/Lucene.Net.Tests/Store/TestLockFactory.cs
index 9fcaa65..2ab4d78 100644
--- a/src/Lucene.Net.Tests/Store/TestLockFactory.cs
+++ b/src/Lucene.Net.Tests/Store/TestLockFactory.cs
@@ -199,7 +199,7 @@ namespace Lucene.Net.Store
}
// Verify: NativeFSLockFactory works correctly
- [Test, LongRunningTest]
+ [Test]
public virtual void TestNativeFSLockFactory()
{
var f = new NativeFSLockFactory(CreateTempDir("testNativeFsLockFactory"));
diff --git a/src/Lucene.Net/Store/NativeFSLockFactory.cs b/src/Lucene.Net/Store/NativeFSLockFactory.cs
index a99e178..e21d345 100644
--- a/src/Lucene.Net/Store/NativeFSLockFactory.cs
+++ b/src/Lucene.Net/Store/NativeFSLockFactory.cs
@@ -90,8 +90,8 @@ namespace Lucene.Net.Store
// LUCENENET: NativeFSLocks in Java are infact singletons; this is how we mimick that to track instances and make sure
// IW.Unlock and IW.IsLocked works correctly
- private static readonly Dictionary<string, Lock> locks = new Dictionary<string, Lock>();
- private static readonly object locksSyncLock = new object();
+ internal static readonly Dictionary<string, Lock> locks = new Dictionary<string, Lock>();
+ internal static readonly object syncLock = new object();
/// <summary>
/// Given a lock name, return the full prefixed path of the actual lock file.
@@ -111,7 +111,7 @@ namespace Lucene.Net.Store
{
var path = GetCanonicalPathOfLockFile(lockName);
Lock l;
- lock (locksSyncLock)
+ lock (syncLock)
{
if (!locks.TryGetValue(path, out l))
locks.Add(path, l = NewLock(path));
@@ -135,7 +135,7 @@ namespace Lucene.Net.Store
Lock l;
// this is the reason why we can't use ConcurrentDictionary: we need the removal and disposal of the lock to be atomic
// otherwise it may clash with MakeLock making a lock and ClearLock disposing of it in another thread.
- lock (locksSyncLock)
+ lock (syncLock)
{
if (locks.TryGetValue(path, out l))
{
@@ -474,7 +474,8 @@ namespace Lucene.Net.Store
// the lock instance from the dictionary that tracks them.
try
{
- outerInstance?.ClearLock(path);
+ lock (NativeFSLockFactory.syncLock)
+ NativeFSLockFactory.locks.Remove(path);
}
finally
{