X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Floader.c;h=85b5639384b1e70c1ac590fc5dd5d3108ea336d0;hb=3e268fb9de0ceaabb70ab6e011777365fa6a93c4;hp=d9781cbdfdd8e849e0cc4d742fb4665eb6cbd4c9;hpb=6ac36d6c40a2dd0ab2800c23d08894856b193c2f;p=mono.git diff --git a/mono/metadata/loader.c b/mono/metadata/loader.c index d9781cbdfdd..85b5639384b 100644 --- a/mono/metadata/loader.c +++ b/mono/metadata/loader.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -63,10 +62,10 @@ static mono_mutex_t global_loader_data_mutex; static gboolean loader_lock_inited; /* Statistics */ -static guint32 inflated_signatures_size; -static guint32 memberref_sig_cache_size; -static guint32 methods_size; -static guint32 signatures_size; +static gint32 inflated_signatures_size; +static gint32 memberref_sig_cache_size; +static gint32 methods_size; +static gint32 signatures_size; /* * This TLS variable holds how many times the current thread has acquired the loader @@ -76,7 +75,6 @@ MonoNativeTlsKey loader_lock_nest_id; static void dllmap_cleanup (void); - static void global_loader_data_lock (void) { @@ -165,7 +163,7 @@ cache_memberref_sig (MonoImage *image, guint32 sig_idx, gpointer sig) else { g_hash_table_insert (image->memberref_signatures, GUINT_TO_POINTER (sig_idx), sig); /* An approximation based on glib 2.18 */ - memberref_sig_cache_size += sizeof (gpointer) * 4; + InterlockedAdd (&memberref_sig_cache_size, sizeof (gpointer) * 4); } mono_image_unlock (image); @@ -726,7 +724,7 @@ mono_method_get_signature_checked (MonoMethod *method, MonoImage *image, guint32 if (cached != sig) mono_metadata_free_inflated_signature (sig); else - inflated_signatures_size += mono_metadata_signature_size (cached); + InterlockedAdd (&inflated_signatures_size, mono_metadata_signature_size (cached)); sig = cached; } @@ -1144,7 +1142,7 @@ static MonoDl *internal_module; static gboolean is_absolute_path (const char *path) { -#ifdef PLATFORM_MACOSX +#ifdef HOST_DARWIN if (!strncmp (path, "@executable_path/", 17) || !strncmp (path, "@loader_path/", 13) || !strncmp (path, "@rpath/", 7)) return TRUE; @@ -1656,10 +1654,10 @@ mono_get_method_from_token (MonoImage *image, guint32 token, MonoClass *klass, result = (MonoMethod *)mono_image_alloc0 (image, sizeof (MonoMethodPInvoke)); } else { result = (MonoMethod *)mono_image_alloc0 (image, sizeof (MonoMethod)); - methods_size += sizeof (MonoMethod); + InterlockedAdd (&methods_size, sizeof (MonoMethod)); } - mono_stats.method_count ++; + InterlockedIncrement (&mono_stats.method_count); result->slot = -1; result->klass = klass; @@ -1888,7 +1886,7 @@ mono_get_method_constrained_checked (MonoImage *image, guint32 token, MonoClass { error_init (error); - *cil_method = mono_get_method_from_token (image, token, NULL, context, NULL, error); + *cil_method = mono_get_method_checked (image, token, NULL, context, error); if (!*cil_method) return NULL; @@ -1901,11 +1899,10 @@ mono_get_method_constrained_checked (MonoImage *image, guint32 token, MonoClass void mono_free_method (MonoMethod *method) { - if (mono_profiler_get_events () & MONO_PROFILE_METHOD_EVENTS) - mono_profiler_method_free (method); + MONO_PROFILER_RAISE (method_free, (method)); /* FIXME: This hack will go away when the profiler will support freeing methods */ - if (mono_profiler_get_events () != MONO_PROFILE_NONE) + if (G_UNLIKELY (mono_profiler_installed ())) return; if (method->signature) { @@ -2396,7 +2393,7 @@ mono_method_signature_checked (MonoMethod *m, MonoError *error) if (!mono_error_ok (error)) return NULL; - inflated_signatures_size += mono_metadata_signature_size (signature); + InterlockedAdd (&inflated_signatures_size, mono_metadata_signature_size (signature)); mono_image_lock (img); @@ -2453,7 +2450,7 @@ mono_method_signature_checked (MonoMethod *m, MonoError *error) mono_image_unlock (img); } - signatures_size += mono_metadata_signature_size (signature); + InterlockedAdd (&signatures_size, mono_metadata_signature_size (signature)); } /* Verify metadata consistency */