Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by [EMAIL PROTECTED]

http://bugzilla.ximian.com/show_bug.cgi?id=77146

--- shadow/77146        2007-06-12 14:45:58.000000000 -0400
+++ shadow/77146.tmp.5131       2007-06-12 19:56:31.000000000 -0400
@@ -73,6 +73,55 @@
 
 
 ------- Additional Comments From [EMAIL PROTECTED]  2007-06-12 14:45 -------
 I was wrong. The delegate keeps a reference to the DynamicMethod, so
 your patch looks right, please check it in.
 
+
+------- Additional Comments From [EMAIL PROTECTED]  2007-06-12 19:56 -------
+The following test case is crashing because the DynamicMethods
+are prematurely collected. If you insert a printf () in
+mono_reflection_destroy_dynamic_method () you'll see that
+they are collected before iterating over the stored delegates.
+
+Any idea why MonoDelegate->method_info in not able to prevent
+the DynamicMethod from being GCed?
+
+
+using System;
+using System.Collections;
+using System.Reflection;
+using System.Reflection.Emit;
+
+class Test
+{
+       delegate int SimpleMethod ();
+
+       static void Main ()
+       {
+               ArrayList list = new ArrayList ();
+
+               for (int i = 0; i < 10; i++) {
+                       list.Add (GenerateMethod (i));
+               }
+
+               GC.Collect ();
+               GC.WaitForPendingFinalizers ();
+
+               foreach (SimpleMethod m in list) {
+                       // m.Method, which is supposed to keep the
+                       // DynMeth alive, is invalid
+                       Console.WriteLine (m.Method);
+               }
+       }
+
+       static SimpleMethod GenerateMethod (int value)
+       {
+               DynamicMethod d = new DynamicMethod (value.ToString (), typeof
+(int), null, typeof (Test));
+               ILGenerator g = d.GetILGenerator ();
+               g.Emit (OpCodes.Ldc_I4, value);
+               g.Emit (OpCodes.Ret);
+               return (SimpleMethod) d.CreateDelegate (typeof (SimpleMethod));
+       }
+}
+
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to