using System.Threading;
public class FinalizerException {
+
~FinalizerException () {
throw new Exception ();
}
+ static IntPtr aptr;
+
/*
* 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];
+ aptr = new IntPtr (values);
if (depth <= 0) {
- new FinalizerException ();
+ for (int i = 0; i < 10; i++)
+ new FinalizerException ();
return;
}
MakeException (depth - 1);
Environment.Exit (0);
};
- MakeException (1024);
+ var t = new Thread (delegate () { MakeException (1024); });
+ t.Start ();
+ t.Join ();
GC.Collect ();
GC.WaitForPendingFinalizers ();