X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-gc.c;h=3b5463e80fb1c16626c54ad26547553a3fbee682;hb=9d84dcb2fc35af1d75450045a8212bf5ab3ff383;hp=27a36204ca0c354e2448695293162924744d88c8;hpb=8ae7b6d6b950e5ee5fcd4a6625e0f467340dddee;p=mono.git diff --git a/mono/mini/mini-gc.c b/mono/mini/mini-gc.c index 27a36204ca0..3b5463e80fb 100644 --- a/mono/mini/mini-gc.c +++ b/mono/mini/mini-gc.c @@ -1,16 +1,18 @@ -/* - * mini-gc.c: GC interface for the mono JIT +/** + * \file + * GC interface for the mono JIT * * Author: * Zoltan Varga (vargaz@gmail.com) * * Copyright 2009 Novell, Inc (http://www.novell.com) * Copyright 2011 Xamarin, Inc (http://www.xamarin.com) + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #include "config.h" #include "mini-gc.h" -#include +#include static gboolean get_provenance (StackFrameInfo *frame, MonoContext *ctx, gpointer data) @@ -38,7 +40,7 @@ get_provenance_func (void) //#if defined(MONO_ARCH_GC_MAPS_SUPPORTED) #include -#include +#include #include #define SIZEOF_SLOT ((int)sizeof (mgreg_t)) @@ -597,7 +599,7 @@ thread_attach_func (void) TlsData *tls; tls = g_new0 (TlsData, 1); - tls->tid = GetCurrentThreadId (); + tls->tid = mono_native_thread_id_get (); tls->info = mono_thread_info_current (); stats.tlsdata_size += sizeof (TlsData); @@ -622,7 +624,7 @@ thread_suspend_func (gpointer user_data, void *sigctx, MonoContext *ctx) return; } - if (tls->tid != GetCurrentThreadId ()) { + if (tls->tid != mono_native_thread_id_get ()) { /* Happens on osx because threads are not suspended using signals */ #ifndef TARGET_WIN32 gboolean res; @@ -649,7 +651,7 @@ thread_suspend_func (gpointer user_data, void *sigctx, MonoContext *ctx) } else { tls->unwind_state.valid = FALSE; } - tls->unwind_state.unwind_data [MONO_UNWIND_DATA_JIT_TLS] = mono_native_tls_get_value (mono_jit_tls_id); + tls->unwind_state.unwind_data [MONO_UNWIND_DATA_JIT_TLS] = mono_tls_get_jit_tls (); tls->unwind_state.unwind_data [MONO_UNWIND_DATA_DOMAIN] = mono_domain_get (); } @@ -923,8 +925,11 @@ conservative_pass (TlsData *tls, guint8 *stack_start, guint8 *stack_end) * Debugging aid to control the number of frames scanned precisely */ if (!precise_frame_limit_inited) { - if (g_getenv ("MONO_PRECISE_COUNT")) - precise_frame_limit = atoi (g_getenv ("MONO_PRECISE_COUNT")); + char *mono_precise_count = g_getenv ("MONO_PRECISE_COUNT"); + if (mono_precise_count) { + precise_frame_limit = atoi (mono_precise_count); + g_free (mono_precise_count); + } precise_frame_limit_inited = TRUE; } @@ -1279,10 +1284,13 @@ mini_gc_init_gc_map (MonoCompile *cfg) static int precise_count; precise_count ++; - if (g_getenv ("MONO_GCMAP_COUNT")) { - if (precise_count == atoi (g_getenv ("MONO_GCMAP_COUNT"))) + char *mono_gcmap_count = g_getenv ("MONO_GCMAP_COUNT"); + if (mono_gcmap_count) { + int count = atoi (mono_gcmap_count); + g_free (mono_gcmap_count); + if (precise_count == count) printf ("LAST: %s\n", mono_method_full_name (cfg->method, TRUE)); - if (precise_count > atoi (g_getenv ("MONO_GCMAP_COUNT"))) + if (precise_count > count) return; } } @@ -2502,6 +2510,7 @@ parse_debug_options (void) exit (1); } g_strfreev (opts); + g_free (env); } void