- mono_jit_stats.allocated_code_size += cfg->code_len;
- code_size_ratio = cfg->code_len;
- if (code_size_ratio > mono_jit_stats.biggest_method_size && mono_jit_stats.enabled) {
- mono_jit_stats.biggest_method_size = code_size_ratio;
- g_free (mono_jit_stats.biggest_method);
- mono_jit_stats.biggest_method = g_strdup_printf ("%s::%s)", method->klass->name, method->name);
- }
- code_size_ratio = (code_size_ratio * 100) / header->code_size;
- if (code_size_ratio > mono_jit_stats.max_code_size_ratio && mono_jit_stats.enabled) {
- mono_jit_stats.max_code_size_ratio = code_size_ratio;
- g_free (mono_jit_stats.max_ratio_method);
- mono_jit_stats.max_ratio_method = g_strdup_printf ("%s::%s)", method->klass->name, method->name);
+ gint32 code_size_ratio = cfg->code_len;
+ InterlockedAdd (&mono_jit_stats.allocated_code_size, code_size_ratio);
+ InterlockedAdd (&mono_jit_stats.native_code_size, code_size_ratio);
+ /* FIXME: use an explicit function to read booleans */
+ if ((gboolean)InterlockedRead ((gint32*)&mono_jit_stats.enabled)) {
+ if (code_size_ratio > InterlockedRead (&mono_jit_stats.biggest_method_size)) {
+ InterlockedWrite (&mono_jit_stats.biggest_method_size, code_size_ratio);
+ char *biggest_method = g_strdup_printf ("%s::%s)", method->klass->name, method->name);
+ biggest_method = InterlockedExchangePointer ((gpointer*)&mono_jit_stats.biggest_method, biggest_method);
+ g_free (biggest_method);
+ }
+ code_size_ratio = (code_size_ratio * 100) / header->code_size;
+ if (code_size_ratio > InterlockedRead (&mono_jit_stats.max_code_size_ratio)) {
+ InterlockedWrite (&mono_jit_stats.max_code_size_ratio, code_size_ratio);
+ char *max_ratio_method = g_strdup_printf ("%s::%s)", method->klass->name, method->name);
+ max_ratio_method = InterlockedExchangePointer ((gpointer*)&mono_jit_stats.max_ratio_method, max_ratio_method);
+ g_free (max_ratio_method);
+ }