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

@ -99,6 +99,7 @@ namespace MonoTests.System.Threading
}
[Test]
[Category ("InterpreterNotWorking")] /* crashes on linux/armv7 */
public void TestCompareExchange_Flt ()
{
flt = flt_1;

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");
}
}
}

View File

@ -307,6 +307,7 @@ namespace MonoTests.System.Threading
[Test]
[Category ("NotDotNet")] // it hangs.
[Category ("InterpreterNotWorking")] /* crashes on linux/arm64 */
public void TestStart()
{
{
@ -449,6 +450,7 @@ namespace MonoTests.System.Threading
}
[Test]
[Category ("InterpreterNotWorking")]
public void TestUndivisibleByPageSizeMaxStackSize ()
{
const int undivisible_stacksize = 1048573;
@ -1016,6 +1018,27 @@ namespace MonoTests.System.Threading
Assert.IsNotNull (ex.Message, "#B8");
}
}
[Test] // bug #60031
public void StoppedThreadsThrowThreadStateException ()
{
var t = new Thread (() => { });
t.Start ();
t.Join ();
Assert.Throws<ThreadStateException> (() => { var isb = t.IsBackground; }, "IsBackground getter");
Assert.Throws<ThreadStateException> (() => { var isb = t.ApartmentState; }, "ApartmentState getter");
Assert.Throws<ThreadStateException> (() => t.ApartmentState = ApartmentState.MTA, "ApartmentState setter");
Assert.Throws<ThreadStateException> (() => t.IsBackground = false, "IsBackground setter");
Assert.Throws<ThreadStateException> (() => t.Start (), "Start ()");
#if MONO_FEATURE_THREAD_SUSPEND_RESUME
Assert.Throws<ThreadStateException> (() => t.Resume (), "Resume ()");
Assert.Throws<ThreadStateException> (() => t.Suspend (), "Suspend ()");
#endif
Assert.Throws<ThreadStateException> (() => t.GetApartmentState (), "GetApartmentState ()");
Assert.Throws<ThreadStateException> (() => t.SetApartmentState (ApartmentState.MTA), "SetApartmentState ()");
Assert.Throws<ThreadStateException> (() => t.TrySetApartmentState (ApartmentState.MTA), "TrySetApartmentState ()");
}
}
[TestFixture]

View File

@ -325,5 +325,14 @@ namespace MonoTests.System.Threading {
t.Change (new TimeSpan (UInt32.MaxValue), new TimeSpan (UInt32.MaxValue));
}
}
[Test]
[ExpectedException (typeof (ObjectDisposedException))]
public void Change_After_Dispose ()
{
var t = new Timer (o => DoNothing (o), null, 0, 0);
t.Dispose ();
t.Change (1, 1);
}
}
}