CONTRACTL_END;
CrstHolder hold(& m_playerLock);
-
- // Avoid saving after MulticoreJitRecorder is deleted, and saving twice
- if (!MulticoreJitRecorder::CloseTimer())
- {
- return;
- }
- if (m_pMulticoreJitRecorder != NULL)
- {
- m_pMulticoreJitRecorder->StopProfile(false);
- }
+ StopProfile(false);
}
#endif // !TARGET_UNIX
}
#ifndef TARGET_UNIX
- static bool CloseTimer()
+ static void CloseTimer()
{
LIMITED_METHOD_CONTRACT;
TP_TIMER * pTimer = InterlockedExchangeT(& s_delayedWriteTimer, NULL);
-
- if (pTimer == NULL)
+ if (pTimer != NULL)
{
- return false;
+ CloseThreadpoolTimer(pTimer);
}
-
- CloseThreadpoolTimer(pTimer);
-
- return true;
}
~MulticoreJitRecorder()
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System;
+using System.Runtime;
+using System.Runtime.CompilerServices;
+using System.Threading;
+
+public static class BasicTest
+{
+ private static int Main()
+ {
+ const int Pass = 100;
+
+ ProfileOptimization.SetProfileRoot(Environment.CurrentDirectory);
+ ProfileOptimization.StartProfile("profile.mcj");
+
+ // Record a method
+ Foo();
+
+ // Let the multi-core JIT recorder time out. The timeout is set to 1 s in the test project.
+ Thread.Sleep(2000);
+
+ // Stop the profile again after timeout (just verifying that it works)
+ ProfileOptimization.StartProfile(null);
+ return Pass;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ private static void Foo()
+ {
+ }
+}
--- /dev/null
+<Project Sdk="Microsoft.NET.Sdk">
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ <Optimize>true</Optimize>
+ <CLRTestPriority>0</CLRTestPriority>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="McjRecorderTimeoutBeforeStop.cs" />
+ </ItemGroup>
+ <PropertyGroup>
+ <CLRTestBatchPreCommands><![CDATA[
+$(CLRTestBatchPreCommands)
+set COMPlus_MultiCoreJitProfileWriteDelay=1
+]]></CLRTestBatchPreCommands>
+ <BashCLRTestPreCommands><![CDATA[
+$(BashCLRTestPreCommands)
+export COMPlus_MultiCoreJitProfileWriteDelay=1
+]]></BashCLRTestPreCommands>
+ </PropertyGroup>
+</Project>