[runtime] Synthesize IList and IReadOnlyList for the element type of enum errays...
[mono.git] / mono / tests / bug-18026.cs
1 using System;
2 using System.Threading;
3
4 public class Test
5 {
6         static bool done = false;
7
8         static void Allocator (int n)
9         {
10                 //Console.WriteLine (n);
11                 if (n < 1)
12                 {
13                         done = true;
14                         return;
15                 }
16
17                 for (int i = 0; i < 10000; ++i)
18                 {
19                         var o = new object [12];
20                         o = null;
21                 }
22                 ThreadPool.QueueUserWorkItem (_ => Allocator (n - 1));
23         }
24
25         static void LowLimits ()
26         {
27                 ThreadPool.SetMinThreads (1, 1);
28                 ThreadPool.SetMaxThreads (1, 1);
29         }
30
31         static void HighLimits ()
32         {
33                 ThreadPool.SetMaxThreads (1000, 1000);
34                 ThreadPool.SetMinThreads (100, 100);
35         }
36
37         public static void Main ()
38         {
39                 var N = 10;
40                 var dones = new bool [N];
41                 var low = false;
42
43                 ThreadPool.QueueUserWorkItem (_ => Allocator (10000));
44                 while (!done)
45                 {
46                         //Console.WriteLine ("new");
47                         if (low)
48                                 LowLimits ();
49                         else
50                                 HighLimits ();
51                         low = !low;
52
53                         for (int i = 0; i < N; ++i)
54                         {
55                                 var j = i;
56                                 dones [j] = false;
57                                 ThreadPool.QueueUserWorkItem (_ => {
58                                                 //Console.WriteLine ("done " + j);
59                                                 Thread.Sleep (1);
60                                                 dones [j] = true;
61                                         });
62                         }
63
64                         bool all_done;
65                         do
66                         {
67                                 all_done = true;
68                                 for (int i = 0; i < N; ++i)
69                                 {
70                                         if (!dones [i])
71                                         {
72                                                 all_done = false;
73                                                 Thread.Sleep (1);
74                                                 break;
75                                         }
76                                 }
77                         } while (!all_done);
78                 }
79         }
80 }