File: appdomain-unload-callback.cs

package info (click to toggle)
mono 4.6.2.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 778,148 kB
  • ctags: 914,052
  • sloc: cs: 5,779,509; xml: 2,773,713; ansic: 432,645; sh: 14,749; makefile: 12,361; perl: 2,488; python: 1,434; cpp: 849; asm: 531; sql: 95; sed: 16; php: 1
file content (44 lines) | stat: -rw-r--r-- 1,060 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Threading;

/*
This test checks if the AddDomain::DomainUnload event is processed with
a fully working domain. In special if the threadpool remains operational.
*/
class Driver
{
	static void UnloadHook (object obj, EventArgs args)
	{
		ManualResetEvent evt = new ManualResetEvent (false);
		Console.WriteLine ("On the UnloadHook");
		if (Environment.HasShutdownStarted)
			throw new Exception ("Environment.HasShutdownStarted must not be true");
		Action<int> f = (int x) => {
			evt.WaitOne (1000);
			evt.Set ();
		};
		f.BeginInvoke (1, null, null);
		evt.WaitOne ();
		Console.WriteLine ("Hook done");
	}

	static void OtherDomain()
	{
		AppDomain app = AppDomain.CurrentDomain;
		Console.WriteLine ("Now I'm on {0}", app);
		app.DomainUnload += Driver.UnloadHook;
	}

	static int Main ()
	{
		AppDomain app = AppDomain.CreateDomain ("Foo");
		Console.WriteLine ("I'm on {0}", AppDomain.CurrentDomain);
		app.DoCallBack (Driver.OtherDomain );

		Thread.Sleep (1);
		AppDomain.Unload (app);
		Thread.Sleep (1);
		return 0;
	}
}