Skip to content

Commit 41aa8fe

Browse files
committed
Fix regression introduced in previous commit
Took the lock for thread safety but never released it
1 parent 644557e commit 41aa8fe

File tree

1 file changed

+36
-12
lines changed

1 file changed

+36
-12
lines changed

src/Couchbase.Lite.Shared/Util/ThreadSafeHashSet.cs

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,43 +31,67 @@ internal sealed class ThreadSafeHashSet<T> : ICollection<T>
3131
public int Count
3232
{
3333
get {
34-
_lock.EnterReadLock();
35-
return _internal.Count;
34+
try {
35+
_lock.EnterReadLock();
36+
return _internal.Count;
37+
} finally {
38+
_lock.ExitReadLock();
39+
}
3640
}
3741
}
3842

3943
public bool IsReadOnly => false;
4044

4145
public void Add(T item)
4246
{
43-
_lock.EnterWriteLock();
44-
_internal.Add(item);
47+
try {
48+
_lock.EnterWriteLock();
49+
_internal.Add(item);
50+
} finally {
51+
_lock.ExitWriteLock();
52+
}
4553
}
4654

4755
public void Clear()
4856
{
49-
_lock.EnterWriteLock();
50-
_internal.Clear();
57+
try {
58+
_lock.EnterWriteLock();
59+
_internal.Clear();
60+
} finally {
61+
_lock.ExitWriteLock();
62+
}
5163
}
5264

5365
public bool Contains(T item)
5466
{
55-
_lock.EnterReadLock();
56-
return _internal.Contains(item);
67+
try {
68+
_lock.EnterReadLock();
69+
return _internal.Contains(item);
70+
} finally {
71+
_lock.ExitReadLock();
72+
}
5773
}
5874

5975
public void CopyTo(T[] array, int arrayIndex)
6076
{
61-
_lock.EnterReadLock();
62-
_internal.CopyTo(array, arrayIndex);
77+
try {
78+
_lock.EnterReadLock();
79+
_internal.CopyTo(array, arrayIndex);
80+
} finally {
81+
_lock.ExitReadLock();
82+
}
6383
}
6484

6585
public IEnumerator<T> GetEnumerator() => new SnapshotEnumerator(this);
6686

6787
public bool Remove(T item)
6888
{
69-
_lock.EnterWriteLock();
70-
return _internal.Remove(item);
89+
try {
90+
_lock.EnterWriteLock();
91+
return _internal.Remove(item);
92+
} finally {
93+
_lock.ExitWriteLock();
94+
}
7195
}
7296

7397
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

0 commit comments

Comments
 (0)