Merge pull request #2704 from BrzVlad/fix-monitor-abort
[mono.git] / mono / tests / finalizer-exception.cs
index 1496dc54b476a8d1e9b3bfe11895500e59a79ea6..71f4b4cc20933647e7fcc1df7d36407ec6261ae7 100644 (file)
@@ -2,17 +2,24 @@ using System;
 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 void MakeException (int depth) {
+       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);
@@ -24,7 +31,9 @@ public class FinalizerException {
                        Environment.Exit (0);
                };
 
-               MakeException (100);
+               var t = new Thread (delegate () { MakeException (1024); });
+               t.Start ();
+               t.Join ();
 
                GC.Collect ();
                GC.WaitForPendingFinalizers ();