|
1 | 1 | #nullable enable |
2 | 2 |
|
3 | 3 | using System; |
4 | | -using System.Collections.Concurrent; |
5 | 4 | using System.Collections.Generic; |
6 | 5 | using System.Diagnostics; |
7 | 6 | using System.Linq; |
@@ -168,7 +167,7 @@ public static void SetCurrent (JniRuntime newCurrent) |
168 | 167 | current = newCurrent; |
169 | 168 | } |
170 | 169 |
|
171 | | - ConcurrentDictionary<IntPtr, IDisposable> TrackedInstances = new ConcurrentDictionary<IntPtr, IDisposable> (); |
| 170 | + Dictionary<IntPtr, IDisposable> TrackedInstances = new Dictionary<IntPtr, IDisposable> (); |
172 | 171 |
|
173 | 172 | JavaVMInterface Invoker; |
174 | 173 | bool DestroyRuntimeOnDispose; |
@@ -403,21 +402,30 @@ public int WeakGlobalReferenceCount { |
403 | 402 |
|
404 | 403 | internal void Track (JniType value) |
405 | 404 | { |
406 | | - TrackedInstances.TryAdd (value.PeerReference.Handle, value); |
| 405 | + lock (TrackedInstances) { |
| 406 | + if (!TrackedInstances.ContainsKey (value.PeerReference.Handle)) |
| 407 | + TrackedInstances [value.PeerReference.Handle] = value; |
| 408 | + } |
407 | 409 | } |
408 | 410 |
|
409 | 411 | internal void UnTrack (IntPtr key) |
410 | 412 | { |
411 | | - TrackedInstances.TryRemove (key, out var _); |
| 413 | + lock (TrackedInstances) { |
| 414 | + if (TrackedInstances.ContainsKey (key)) |
| 415 | + TrackedInstances.Remove (key); |
| 416 | + } |
412 | 417 | } |
413 | 418 |
|
414 | 419 | void ClearTrackedReferences () |
415 | 420 | { |
416 | | - foreach (var k in TrackedInstances.Keys.ToList ()) { |
417 | | - if (TrackedInstances.TryRemove (k, out var d)) |
418 | | - d.Dispose (); |
| 421 | + List<IDisposable> values; |
| 422 | + lock (TrackedInstances) { |
| 423 | + values = new List<IDisposable> (TrackedInstances.Values); |
| 424 | + TrackedInstances.Clear (); |
419 | 425 | } |
420 | | - TrackedInstances.Clear (); |
| 426 | + |
| 427 | + foreach (var d in values) |
| 428 | + d.Dispose (); |
421 | 429 | } |
422 | 430 |
|
423 | 431 | public virtual bool ExceptionShouldTransitionToJni (Exception e) |
|
0 commit comments