[threads] Check InternalThread.last just after checking corlib version
authorLudovic Henry <ludovic@xamarin.com>
Fri, 16 Sep 2016 09:46:46 +0000 (11:46 +0200)
committerLudovic Henry <ludovic@xamarin.com>
Fri, 16 Sep 2016 09:46:46 +0000 (11:46 +0200)
mono/metadata/appdomain.c
mono/metadata/threads.c

index 833d5fad925f0a429a6a6c38bab662d4f3c3e16b..4a72f25174dd4cf132c356f033851e1706ce38a2 100644 (file)
@@ -343,8 +343,14 @@ mono_check_corlib_version (void)
        int version = mono_get_corlib_version ();
        if (version != MONO_CORLIB_VERSION)
                return g_strdup_printf ("expected corlib version %d, found %d.", MONO_CORLIB_VERSION, version);
-       else
-               return NULL;
+
+       /* Check that the managed and unmanaged layout of MonoInternalThread matches */
+       guint32 native_offset = (guint32) MONO_STRUCT_OFFSET (MonoInternalThread, last);
+       guint32 managed_offset = mono_field_get_offset (mono_class_get_field_from_name (mono_defaults.internal_thread_class, "last"));
+       if (native_offset != managed_offset)
+               return g_strdup_printf ("expected InternalThread.last field offset %u, found %u. See InternalThread.last comment", native_offset, managed_offset);
+
+       return NULL;
 }
 
 /**
index ab3a11ea5f15e329d54147c82839ff1f3909a639..7954a8fd22c63d7ae1be9f5e7520e63430c86ccc 100644 (file)
@@ -2849,9 +2849,6 @@ void mono_thread_init (MonoThreadStartCB start_cb,
         * anything up.
         */
        GetCurrentProcess ();
-
-       /* Check that the managed and unmanaged layout of MonoInternalThread matches */
-       g_assert (MONO_STRUCT_OFFSET (MonoInternalThread, last) == mono_field_get_offset (mono_class_get_field_from_name (mono_defaults.internal_thread_class, "last")));
 }
 
 void mono_thread_cleanup (void)