Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@users.noreply.github.com>2017-11-16 11:29:15 +0300
committerMarek Safar <marek.safar@gmail.com>2017-11-16 11:29:15 +0300
commit375471820c02ff0bab025bff75b5da7efc95d3cd (patch)
treed732d7ef2c377fbc43f586e85c4d948fa85e7068 /mcs/class/corlib
parentc0f6935b45a91829133869e1828ee47eb890055a (diff)
[corlib] Don't capture the execution context when UnsafeRegisterWaitForSingleObject is used. Fixes #60029 (#6013)
Diffstat (limited to 'mcs/class/corlib')
-rw-r--r--mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs39
1 files changed, 39 insertions, 0 deletions
diff --git a/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs b/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs
index 86e735b9dbe..e86fd1d0e52 100644
--- a/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs
+++ b/mcs/class/corlib/Test/System.Threading/ThreadPoolTest.cs
@@ -216,5 +216,44 @@ namespace MonoTests.System.Threading
mre.WaitOne ();
}
+
+ [Test]
+ public void AsyncLocalCapture ()
+ {
+ var asyncLocal = new AsyncLocal<int>();
+ asyncLocal.Value = 1;
+ int var_0, var_1, var_2, var_3;
+ var_0 = var_1 = var_2 = var_3 = 99;
+ var cw = new CountdownEvent (4);
+
+ var evt = new AutoResetEvent (false);
+ ThreadPool.QueueUserWorkItem(state => {
+ var_0 = asyncLocal.Value;
+ cw.Signal ();
+ }, null);
+
+ ThreadPool.UnsafeQueueUserWorkItem(state => {
+ var_1 = asyncLocal.Value;
+ cw.Signal ();
+ }, null);
+
+ ThreadPool.RegisterWaitForSingleObject (evt, (state, to) => {
+ var_2 = asyncLocal.Value;
+ cw.Signal ();
+ }, null, 1, false);
+
+ ThreadPool.UnsafeRegisterWaitForSingleObject (evt, (state, to) => {
+ var_3 = asyncLocal.Value;
+ cw.Signal ();
+ }, null, 1, false);
+
+ Assert.IsTrue (cw.Wait (1000), "cw_wait");
+
+ Assert.AreEqual (1, var_0, "var_0");
+ Assert.AreEqual (0, var_1, "var_1");
+ Assert.AreEqual (1, var_2, "var_2");
+ Assert.AreEqual (0, var_3, "var_3");
+ }
+
}
} \ No newline at end of file