2010-03-02 Levi Bard <levi@unity3d.com>
authorZoltan Varga <vargaz@gmail.com>
Tue, 2 Mar 2010 22:08:45 +0000 (22:08 -0000)
committerZoltan Varga <vargaz@gmail.com>
Tue, 2 Mar 2010 22:08:45 +0000 (22:08 -0000)
* debugger-agent.c: Invalidate thread stacks on domain unload.

svn path=/trunk/mono/; revision=152881

mono/mini/ChangeLog
mono/mini/debugger-agent.c

index f1c27a5ef4ed67ba7adedecb510a10839f288605..e70689958abf13477a33757ed0934bef7515d386 100755 (executable)
@@ -1,3 +1,7 @@
+2010-03-02  Levi Bard  <levi@unity3d.com>
+
+       * debugger-agent.c: Invalidate thread stacks on domain unload.
+
 2010-03-02  Mark Probst  <mark.probst@gmail.com>
 
        * method-to-ir.c: Emit dummy_use for stored reference after write
index 5ddfeb93bb2b267311f0357195ced2d102c46fda..9296a0a5c2b86d170377a911f9b0be917c128182 100644 (file)
@@ -564,6 +564,8 @@ static void appdomain_load (MonoProfiler *prof, MonoDomain *domain, int result);
 
 static void appdomain_unload (MonoProfiler *prof, MonoDomain *domain);
 
+static void invalidate_each_thread (gpointer key, gpointer value, gpointer user_data);
+
 static void assembly_load (MonoProfiler *prof, MonoAssembly *assembly, int result);
 
 static void assembly_unload (MonoProfiler *prof, MonoAssembly *assembly);
@@ -2866,9 +2868,23 @@ appdomain_load (MonoProfiler *prof, MonoDomain *domain, int result)
 static void
 appdomain_unload (MonoProfiler *prof, MonoDomain *domain)
 {
+       /* Invalidate each thread's frame stack */
+       mono_g_hash_table_foreach (thread_to_tls, invalidate_each_thread, NULL);
        process_profiler_event (EVENT_KIND_APPDOMAIN_UNLOAD, domain);
 }
 
+/*
+ * invalidate_each_thread:
+ *
+ *   A GHFunc to invalidate frames.
+ *   value must be a DebuggerTlsData*
+ */
+static void
+invalidate_each_thread (gpointer key, gpointer value, gpointer user_data)
+{
+       invalidate_frames (value);
+}
+
 static void
 assembly_load (MonoProfiler *prof, MonoAssembly *assembly, int result)
 {