in src/ServiceProfiler.EventPipe.Otel/Microsoft.ApplicationInsights.Profiler.Shared/Orchestrations/OrchestratorEventPipe.cs [131:190]
public override async Task<bool> StopProfilingAsync(SchedulingPolicy policy, CancellationToken cancellationToken)
{
_logger.LogTrace("Stop profiling is requested by {sourceName}, threadId: {managedThreadId}", policy.Source, Thread.CurrentThread.ManagedThreadId);
bool result;
if (_currentProfilingPolicy == null)
{
_logger.LogTrace("Request stop profiling by {source} rejected. No profiling is running.", policy.Source);
result = false;
}
else if (_currentProfilingPolicy != policy)
{
_logger.LogTrace("Stop profiling by {requestingSource} failed. The current profiling is requested by {currentSource}", policy.Source, _currentProfilingPolicy?.Source);
result = false;
}
else
{
Task<bool> waitSemaphoreTask = _policyChangeHandler.WaitAsync(TimeSpan.FromSeconds(30), cancellationToken);
try
{
_semaphoreTasks.Add(waitSemaphoreTask);
if (await waitSemaphoreTask.ConfigureAwait(false))
{
try
{
if (_currentProfilingPolicy == policy)
{
_logger.LogDebug("Stopping Profiler by {source}", policy.Source);
result = await _profilerProvider.StopServiceProfilerAsync(policy, cancellationToken).ConfigureAwait(false);
if (result)
{
_logger.LogDebug("Profiler stopped by {source}", policy.Source);
_currentProfilingPolicy = null;
}
}
else
{
_logger.LogTrace("Can't stop profiling requested by {newSource}.", _currentProfilingPolicy.Source);
result = false;
}
}
finally
{
_policyChangeHandler.Release();
}
}
else
{
_logger.LogWarning("Can't get the handler to stop a profiling. Requested by {newSource}. Current Profiling by: {currentSource}", policy.Source, _currentProfilingPolicy?.Source);
result = false;
}
}
finally
{
_semaphoreTasks.Remove(waitSemaphoreTask);
}
}
return result;
}