New test.
[mono.git] / mono / tests / finalizer-exception.cs
1
2 using System; 
3 using System.Collections; 
4 using System.Threading;
5
6 public class foo  { 
7         public static LocalDataStoreSlot dataslot = Thread.AllocateDataSlot();
8         public static int final_count=0;
9
10         ~foo() { 
11                 // Demonstrate that this is still the same thread
12                 string ID=(string)Thread.GetData(dataslot);
13                 if(ID==null) {
14                         Console.WriteLine("Set ID: foo");
15                         Thread.SetData(dataslot, "foo");
16                 }
17
18                 // Don't run forever
19                 if(final_count++>10) {
20                         Environment.Exit(0);
21                 }
22
23                 Console.WriteLine("finalizer thread ID: {0}", (string)Thread.GetData(dataslot));
24                 throw new SystemException("wibble");
25         } 
26
27         public static int Main() { 
28                 ArrayList list = new ArrayList (); 
29                 Thread.SetData(dataslot, "ID is wibble");
30                 Environment.ExitCode = 2;
31                 while(true) { 
32                         foo instance = new foo(); 
33                         list.Add (new WeakReference(instance)); 
34                 }
35                 return 1;
36         } 
37
38