Add locking to EventWaitHandle.Set/Reset to avoid crashes when another thread dispose...
[mono.git] / mcs / class / corlib / System.Runtime.CompilerServices / ConditionalWeakTable.cs
index c4487531a9708209e97f133958580324a178d7f7..4abb40fb3a4b5f588c26837ea8b764a978377049 100644 (file)
@@ -26,7 +26,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_4_0 || BOOTSTRAP_NET_4_0 || MOONLIGHT
+#if NET_4_0 || MOONLIGHT || MOBILE
 using System;
 using System.Collections;
 
@@ -85,7 +85,7 @@ namespace System.Runtime.CompilerServices
                                int idx, initial_idx;
                                int free_slot = -1;
        
-                               idx = initial_idx = RuntimeHelpers.GetHashCode (key) % len;
+                               idx = initial_idx = (RuntimeHelpers.GetHashCode (key) & int.MaxValue) % len;
        
                                do {
                                        object k = tmp [idx].key;
@@ -110,7 +110,6 @@ namespace System.Runtime.CompilerServices
 
                public void Add (TKey key, TValue value)
                {
-                       TValue tmp;
                        if (key == default (TKey))
                                throw new ArgumentNullException ("Null key", "key");
 
@@ -122,7 +121,7 @@ namespace System.Runtime.CompilerServices
                                int idx,initial_idx;
                                int free_slot = -1;
 
-                               idx = initial_idx = RuntimeHelpers.GetHashCode (key) % len;
+                               idx = initial_idx = (RuntimeHelpers.GetHashCode (key) & int.MaxValue) % len;
                                do {
                                        object k = data [idx].key;
 
@@ -154,7 +153,7 @@ namespace System.Runtime.CompilerServices
                        lock (_lock) {
                                int len = data.Length;
                                int idx, initial_idx;
-                               idx = initial_idx = RuntimeHelpers.GetHashCode (key) % len;
+                               idx = initial_idx = (RuntimeHelpers.GetHashCode (key) & int.MaxValue) % len;
                                do {
                                        object k = data[idx].key;
                                        if (k == key) {
@@ -181,7 +180,8 @@ namespace System.Runtime.CompilerServices
                        lock (_lock) {
                                int len = data.Length;
                                int idx, initial_idx;
-                               idx = initial_idx = RuntimeHelpers.GetHashCode (key) % len;
+                               idx = initial_idx = (RuntimeHelpers.GetHashCode (key) & int.MaxValue) % len;
+                               
                                do {
                                        object k = data [idx].key;
                                        if (k == key) {