@@ -13,7 +13,7 @@ internal sealed class FieldAccessor
1313 private readonly RtFieldInfo _fieldInfo ;
1414 private IntPtr _addressOrOffset ;
1515 private unsafe MethodTable * _methodTable ;
16- private FieldAccessorType _fieldAccessType ;
16+ private volatile FieldAccessorType _fieldAccessType ;
1717
1818 internal FieldAccessor ( FieldInfo fieldInfo )
1919 {
@@ -52,19 +52,19 @@ private void Initialize()
5252 {
5353 if ( fieldType . IsEnum )
5454 {
55- _fieldAccessType = GetPrimitiveAccessorTypeForStatic ( fieldType . GetEnumUnderlyingType ( ) ) ;
5655 _methodTable = ( MethodTable * ) fieldType . TypeHandle . Value ;
56+ _fieldAccessType = GetPrimitiveAccessorTypeForStatic ( fieldType . GetEnumUnderlyingType ( ) ) ;
5757 }
5858 else if ( RuntimeTypeHandle . GetCorElementType ( fieldType ) == CorElementType . ELEMENT_TYPE_VALUETYPE )
5959 {
6060 // The runtime stores non-primitive value types as a boxed value.
61- _fieldAccessType = FieldAccessorType . StaticValueTypeBoxed ;
6261 _methodTable = ( MethodTable * ) fieldType . TypeHandle . Value ;
62+ _fieldAccessType = FieldAccessorType . StaticValueTypeBoxed ;
6363 }
6464 else
6565 {
66- _fieldAccessType = GetPrimitiveAccessorTypeForStatic ( fieldType ) ;
6766 _methodTable = ( MethodTable * ) fieldType . TypeHandle . Value ;
67+ _fieldAccessType = GetPrimitiveAccessorTypeForStatic ( fieldType ) ;
6868 }
6969 }
7070 else if ( fieldType . IsPointer )
@@ -73,8 +73,8 @@ private void Initialize()
7373 }
7474 else if ( fieldType . IsFunctionPointer )
7575 {
76- _fieldAccessType = GetIntPtrAccessorTypeForStatic ( ) ;
7776 _methodTable = ( MethodTable * ) typeof ( IntPtr ) . TypeHandle . Value ;
77+ _fieldAccessType = GetIntPtrAccessorTypeForStatic ( ) ;
7878 }
7979 else
8080 {
@@ -87,22 +87,22 @@ private void Initialize()
8787
8888 if ( fieldType . IsEnum )
8989 {
90- _fieldAccessType = GetPrimitiveAccessorTypeForInstance ( fieldType . GetEnumUnderlyingType ( ) ) ;
9190 _methodTable = ( MethodTable * ) fieldType . TypeHandle . Value ;
91+ _fieldAccessType = GetPrimitiveAccessorTypeForInstance ( fieldType . GetEnumUnderlyingType ( ) ) ;
9292 }
9393 else if ( fieldType . IsValueType )
9494 {
95- _fieldAccessType = GetPrimitiveAccessorTypeForInstance ( fieldType ) ;
9695 _methodTable = ( MethodTable * ) fieldType . TypeHandle . Value ;
96+ _fieldAccessType = GetPrimitiveAccessorTypeForInstance ( fieldType ) ;
9797 }
9898 else if ( fieldType . IsPointer )
9999 {
100100 _fieldAccessType = FieldAccessorType . InstancePointerType ;
101101 }
102102 else if ( fieldType . IsFunctionPointer )
103103 {
104- _fieldAccessType = GetIntPtrAccessorTypeForInstance ( ) ;
105104 _methodTable = ( MethodTable * ) typeof ( IntPtr ) . TypeHandle . Value ;
105+ _fieldAccessType = GetIntPtrAccessorTypeForInstance ( ) ;
106106 }
107107 else
108108 {
0 commit comments