[runtime] Switch getenv to use heap memory
[mono.git] / mono / mini / mini-gc.c
index 27a36204ca0c354e2448695293162924744d88c8..a7eacef6bcfc310e27dff68e48ce3d95a77e4e4a 100644 (file)
@@ -6,11 +6,12 @@
  *
  * 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 <mono/metadata/gc-internal.h>
+#include <mono/metadata/gc-internals.h>
 
 static gboolean
 get_provenance (StackFrameInfo *frame, MonoContext *ctx, gpointer data)
@@ -38,7 +39,7 @@ get_provenance_func (void)
 //#if defined(MONO_ARCH_GC_MAPS_SUPPORTED)
 
 #include <mono/metadata/sgen-conf.h>
-#include <mono/metadata/gc-internal.h>
+#include <mono/metadata/gc-internals.h>
 #include <mono/utils/mono-counters.h>
 
 #define SIZEOF_SLOT ((int)sizeof (mgreg_t))
@@ -597,7 +598,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 +623,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 +650,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 +924,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 +1283,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 +2509,7 @@ parse_debug_options (void)
                exit (1);
        }
        g_strfreev (opts);
+       g_free (env);
 }
 
 void