using System;
using System.Threading;
using System.Reflection;
+using System.Runtime.Remoting;
[Serializable]
public class Foo {
}
}
+public class Bar : MarshalByRefObject {
+ public int test (int x) {
+ Console.WriteLine ("in " + Thread.GetDomain ().FriendlyName);
+ return x + 1;
+ }
+
+ public void start_wait () {
+ Action a = delegate () {
+ Thread.Sleep (10000);
+ };
+ a.BeginInvoke (null, null);
+ }
+}
+
[Serializable]
public class SlowFinalize {
public class Tests
{
- public static int Main() {
- return TestDriver.RunTests (typeof (Tests));
+ public static int Main(string[] args) {
+ if (args.Length == 0)
+ return TestDriver.RunTests (typeof (Tests), new String[] { "-v" });
+ else
+ return TestDriver.RunTests (typeof (Tests), args);
}
public static int test_0_unload () {
return 0;
}
+ /* In recent mono versions, there is no unload timeout */
+ /*
public static int test_0_unload_with_active_threads_timeout () {
AppDomain domain = AppDomain.CreateDomain ("Test4");
BThread o = (BThread)domain.CreateInstanceFromAndUnwrap (typeof (Tests).Assembly.Location, "BThread");
return 1;
}
+ */
static void Worker (object x) {
Thread.Sleep (100000);
return 0;
}
+ public static int test_0_invoke_after_unload () {
+ AppDomain domain = AppDomain.CreateDomain ("DeadInvokeTest");
+ Bar bar = (Bar)domain.CreateInstanceAndUnwrap (typeof (Tests).Assembly.FullName, "Bar");
+ int x;
+
+ if (!RemotingServices.IsTransparentProxy(bar))
+ return 3;
+
+ AppDomain.Unload (domain);
+
+ try {
+ x = bar.test (123);
+ if (x == 124)
+ return 1;
+ return 2;
+ } catch (Exception e) {
+ return 0;
+ }
+ }
+
+ public static int test_0_abort_wait () {
+ AppDomain domain = AppDomain.CreateDomain ("AbortWait");
+ Bar bar = (Bar)domain.CreateInstanceAndUnwrap (typeof (Tests).Assembly.FullName, "Bar");
+ int x;
+
+ bar.start_wait ();
+ AppDomain.Unload (domain);
+ return 0;
+ }
+
// FIXME: This does not work yet, because the thread is finalized too
// early
/*