Imported Upstream version 5.10.0.47

Former-commit-id: d0813289fa2d35e1f8ed77530acb4fb1df441bc0
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-01-24 17:04:36 +00:00
parent 88ff76fe28
commit e46a49ecf1
5927 changed files with 226314 additions and 129848 deletions

View File

@ -156,6 +156,23 @@ namespace MonoTests.System.Threading
Assert.IsTrue (workerThreads == workerThreads_new, "#3");
Assert.IsTrue (completionPortThreads == completionPortThreads_new, "#4");
}
[Test]
public void SetMaxPossibleThreads ()
{
var maxPossibleThreads = 0x7fff;
int maxWt, macCpt;
ThreadPool.SetMaxThreads (maxPossibleThreads, maxPossibleThreads);
ThreadPool.GetMaxThreads (out maxWt, out macCpt);
Assert.AreEqual (maxPossibleThreads, maxWt);
Assert.AreEqual (maxPossibleThreads, macCpt);
ThreadPool.SetMaxThreads (maxPossibleThreads + 1, maxPossibleThreads + 1);
ThreadPool.GetMaxThreads (out maxWt, out macCpt);
Assert.AreEqual (maxPossibleThreads, maxWt);
Assert.AreEqual (maxPossibleThreads, macCpt);
}
[Test]
public void GetAvailableThreads ()
@ -199,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, millisecondsTimeOutInterval: 1, executeOnlyOnce: true);
ThreadPool.UnsafeRegisterWaitForSingleObject (evt, (state, to) => {
var_3 = asyncLocal.Value;
cw.Signal ();
}, null, millisecondsTimeOutInterval: 1, executeOnlyOnce: true);
Assert.IsTrue (cw.Wait (2000), "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");
}
}
}