Fix some AOT memory leaks.
authorZoltan Varga <vargaz@gmail.com>
Thu, 19 Aug 2010 22:45:11 +0000 (00:45 +0200)
committerZoltan Varga <vargaz@gmail.com>
Thu, 19 Aug 2010 22:45:11 +0000 (00:45 +0200)
mono/mini/aot-runtime.c
mono/mini/mini.c
mono/mini/mini.h

index 28545d496488d6b08b63f53a9ca778404298b487..017cc083dd0b7bccdb91c5c195bb571ff0912ee4 100644 (file)
@@ -165,6 +165,8 @@ static guint32 n_pagefaults = 0;
 static gsize aot_code_low_addr = (gssize)-1;
 static gsize aot_code_high_addr = 0;
 
+static GHashTable *aot_jit_icall_hash;
+
 static void
 init_plt (MonoAotModule *info);
 
@@ -1292,6 +1294,15 @@ mono_aot_init (void)
                use_aot_cache = TRUE;
 }
 
+void
+mono_aot_cleanup (void)
+{
+       if (aot_jit_icall_hash)
+               g_hash_table_destroy (aot_jit_icall_hash);
+       if (aot_modules)
+               g_hash_table_destroy (aot_modules);
+}
+
 static gboolean
 decode_cached_class_info (MonoAotModule *module, MonoCachedClassInfo *info, guint8 *buf, guint8 **endbuf)
 {
@@ -3127,8 +3138,6 @@ mono_create_ftnptr_malloc (guint8 *code)
 #endif
 }
 
-static GHashTable *aot_jit_icall_hash;
-
 /*
  * mono_aot_register_jit_icall:
  *
index 095d8b88da8a8b433e9ff2ee757c2f7865055a51..fcb2ca1109df19729f605f5da8eff44f6ca8d844 100644 (file)
@@ -6279,6 +6279,8 @@ mini_cleanup (MonoDomain *domain)
                mono_llvm_cleanup ();
 #endif
 
+       mono_aot_cleanup ();
+
        mono_trampolines_cleanup ();
 
        mono_unwind_cleanup ();
index 9428fdc4d42c919d3b3d518f7a9997f02a2eccb7..01a0b17d23ec34cfefad8eb8d48e4ebd7b9d016c 100644 (file)
@@ -1612,6 +1612,7 @@ guint8 *mono_arch_nacl_skip_nops(guint8 *code);
 
 /* AOT */
 void      mono_aot_init                     (void) MONO_INTERNAL;
+void      mono_aot_cleanup                  (void) MONO_INTERNAL;
 gpointer  mono_aot_get_method               (MonoDomain *domain,
                                                                                         MonoMethod *method) MONO_INTERNAL;
 gpointer  mono_aot_get_method_from_token    (MonoDomain *domain, MonoImage *image, guint32 token) MONO_INTERNAL;