[metadata] Lock around special static fields hash access
[mono.git] / mono / mini / jit-icalls.c
index ab4ab1295f8f3f6fb8d73bcca4ba8e7b9d320f16..401ac247e2a0569fb100aa530f9df08cb1682c03 100644 (file)
@@ -1,5 +1,6 @@
-/*
- * jit-icalls.c: internal calls used by the JIT
+/**
+ * \file
+ * internal calls used by the JIT
  *
  * Author:
  *   Dietmar Maurer (dietmar@ximian.com)
@@ -887,11 +888,16 @@ mono_class_static_field_address (MonoDomain *domain, MonoClassField *field)
 
        //printf ("SFLDA1 %p\n", (char*)vtable->data + field->offset);
 
-       if (domain->special_static_fields && (addr = g_hash_table_lookup (domain->special_static_fields, field)))
+       if (field->offset == -1) {
+               /* Special static */
+               g_assert (domain->special_static_fields);
+               mono_domain_lock (domain);
+               addr = g_hash_table_lookup (domain->special_static_fields, field);
+               mono_domain_unlock (domain);
                addr = mono_get_special_static_data (GPOINTER_TO_UINT (addr));
-       else
+       } else {
                addr = (char*)mono_vtable_get_static_field_data (vtable) + field->offset;
-       
+       }
        return addr;
 }