throw new Exception ();
}
+ /*
+ * We allocate the exception object deep down the stack so
+ * that it doesn't get pinned.
+ */
+ public static unsafe void MakeException (int depth) {
+ // Avoid tail calls
+ int* values = stackalloc int [20];
+ if (depth <= 0) {
+ new FinalizerException ();
+ return;
+ }
+ MakeException (depth - 1);
+ }
+
public static int Main () {
AppDomain.CurrentDomain.UnhandledException += (sender, args) => {
Console.WriteLine ("caught");
Environment.Exit (0);
};
- new FinalizerException ();
+ MakeException (1024);
GC.Collect ();
GC.WaitForPendingFinalizers ();