From: Brian Sullivan Date: Thu, 12 Jul 2018 19:49:08 +0000 (-0700) Subject: Added the repro test case X-Git-Tag: submit/tizen/20210909.063632~11030^2~4387^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=29f7be482664b092df6793a1d0ae53ee4441cf69;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Added the repro test case Commit migrated from https://github.com/dotnet/coreclr/commit/89968de88fa5d036f86a95772cd292d44ab4b23c --- diff --git a/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_18887/GitHub_18887.cs b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_18887/GitHub_18887.cs new file mode 100644 index 0000000..c51de26 --- /dev/null +++ b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_18887/GitHub_18887.cs @@ -0,0 +1,115 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Threading; +using System.Runtime.CompilerServices; + +internal class BufferState +{ + internal const int Idle = 0; + internal const int InUse = 1; + + private int currentState; + + internal BufferState() + { + this.currentState = Idle; + } + + internal bool IsIdle + { + get { return this.currentState == Idle; } + } + + internal bool EnterInUseState() + { + return this.TransitionState(Idle, InUse); + } + + internal bool EnterIdleState() + { + return this.TransitionState(InUse, Idle); + } + + private bool TransitionState(int expectedCurrentState, int desiredState) + { + if (Interlocked.CompareExchange(ref this.currentState, + desiredState, + expectedCurrentState) == expectedCurrentState) + { + return true; + } + + return false; + } +} + +class Program +{ + bool forceUpload; + BufferState currentState; + + Program() + { + this.forceUpload = false; + this.currentState = new BufferState(); + while(!this.currentState.EnterInUseState()) + { + Console.WriteLine("Failed to enterInUseState"); + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public void ThrowIfDisposed() + { + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public void QueueCurrentBufferForUploadAndSetNewBuffer() + { + } + + public void Test() + { + this.ThrowIfDisposed(); + + try + { + if (forceUpload == true) + { + // Queue the buffer for upload. + this.QueueCurrentBufferForUploadAndSetNewBuffer(); + } + } + finally + { + // Always transition back to the idle state. + this.currentState.EnterIdleState(); + } + } + + public static int Main() + { + Program p = new Program(); + if (p.currentState.IsIdle) + { + Console.WriteLine("Failed! - 102"); + return 102; + } + + p.Test(); + + if (p.currentState.IsIdle) + { + Console.WriteLine("Passed!"); + return 100; + } + else + { + Console.WriteLine("Failed! - 101"); + return 101; + } + } +} diff --git a/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_18887/GitHub_18887.csproj b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_18887/GitHub_18887.csproj new file mode 100644 index 0000000..95aba99 --- /dev/null +++ b/src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_18887/GitHub_18887.csproj @@ -0,0 +1,34 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ..\..\ + + + + + + + False + + + + + True + + + + + + + + + +