NuGet / Home

Repo for NuGet Client issues
Other
1.5k stars 253 forks source link

NuGetSdkResolver deadlock when authentication is involved #9447

Open nkolev92 opened 4 years ago

nkolev92 commented 4 years ago

The following code fails to use JoinableTaskFactory, and causes a deadlock when invoked on the UI thread:

https://github.com/Microsoft/msbuild/blob/a6932230ec64fe853dddb42b2e5c385fad4e3785/src/NuGetSdkResolver/NuGetSdkResolver.cs#L118-L126

mscorlib.dll!System.Threading.Monitor.Wait(object obj, int millisecondsTimeout, bool exitContext) Line 203  C#
    mscorlib.dll!System.Threading.Monitor.Wait(object obj, int millisecondsTimeout) Line 213    C#
    mscorlib.dll!System.Threading.ManualResetEventSlim.Wait(int millisecondsTimeout, System.Threading.CancellationToken cancellationToken) Line 688 C#
    mscorlib.dll!System.Threading.Tasks.Task.SpinThenBlockingWait(int millisecondsTimeout, System.Threading.CancellationToken cancellationToken) Line 3320  C#
    mscorlib.dll!System.Threading.Tasks.Task.InternalWait(int millisecondsTimeout, System.Threading.CancellationToken cancellationToken) Line 3259  C#
    mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task) Line 148 C#
    NuGet.MSBuildSdkResolver.dll!NuGet.MSBuildSdkResolver.NuGetSdkResolver.NuGetAbstraction.GetSdkResult(Microsoft.Build.Framework.SdkReference sdk, object nuGetVersion, Microsoft.Build.Framework.SdkResolverContext context, Microsoft.Build.Framework.SdkResultFactory factory) Unknown
    NuGet.MSBuildSdkResolver.dll!NuGet.MSBuildSdkResolver.NuGetSdkResolver.ResolveSdk(Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.Framework.SdkResolverContext context, Microsoft.Build.Framework.SdkResultFactory factory) Unknown
    NuGet.MSBuildSdkResolver.dll!NuGet.MSBuildSdkResolver.NuGetSdkResolverBase.Resolve(Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.Framework.SdkResolverContext context, Microsoft.Build.Framework.SdkResultFactory factory)    Unknown
    Microsoft.Build.dll!Microsoft.Build.BackEnd.SdkResolution.SdkResolverService.GetSdkResult(int submissionId, Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.BackEnd.Logging.LoggingContext loggingContext, Microsoft.Build.Construction.ElementLocation sdkReferenceLocation, string solutionPath, string projectPath)  Unknown
    Microsoft.Build.dll!Microsoft.Build.BackEnd.SdkResolution.SdkResolverService.ResolveSdk(int submissionId, Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.BackEnd.Logging.LoggingContext loggingContext, Microsoft.Build.Construction.ElementLocation sdkReferenceLocation, string solutionPath, string projectPath)    Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.ExpandAndLoadImportsFromUnescapedImportExpressionConditioned(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement, out System.Collections.Generic.List<Microsoft.Build.Construction.ProjectRootElement> projects, bool throwOnFileNotExistsError)    Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.ExpandAndLoadImports(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement)   Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.EvaluateImportElement(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement)  Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport)    Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.Evaluate(Microsoft.Build.BackEnd.Logging.ILoggingService loggingService, Microsoft.Build.Framework.BuildEventContext buildEventContext)  Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.Evaluate(Microsoft.Build.Evaluation.IEvaluatorData<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition> data, Microsoft.Build.Construction.ProjectRootElement root, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings, int maxNodeCount, Microsoft.Build.Collections.PropertyDictionary<Microsoft.Build.Execution.ProjectPropertyInstance> environmentProperties, Microsoft.Build.BackEnd.Logging.ILoggingService loggingService, Microsoft.Build.Evaluation.IItemFactory<Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectItem> itemFactory, Microsoft.Build.Evaluation.IToolsetProvider toolsetProvider, Microsoft.Build.Evaluation.ProjectRootElementCache projectRootElementCache, Microsoft.Build.Framework.BuildEventContext buildEventContext, Microsoft.Build.Execution.ProjectInstance projectInstanceIfAnyForDebuggerOnly, Microsoft.Build.BackEnd.SdkResolution.ISdkResolverService sdkResolverService, int submissionId) Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Reevaluate(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.ReevaluateIfNecessary(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings)  Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Initialize(System.Collections.Generic.IDictionary<string, string> globalProperties, string toolsVersion, string subToolsetVersion, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings)  Unknown
    Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Project(Microsoft.Build.Construction.ProjectRootElement xml, System.Collections.Generic.IDictionary<string, string> globalProperties, string toolsVersion, string subToolsetVersion, Microsoft.Build.Evaluation.ProjectCollection projectCollection, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings)    Unknown
    Microsoft.VisualStudio.Workspace.Extensions.Implementation.dll!Microsoft.VisualStudio.Workspace.Extensions.MSBuild.MSBuildProjectHelper.GetProjectConfigurations(Microsoft.Build.Construction.ProjectRootElement projectXml, Microsoft.Build.Evaluation.ProjectCollection projectCollection, System.Collections.Generic.IDictionary<string, string> globalProperties)   Unknown
    Microsoft.VisualStudio.Workspace.Extensions.Implementation.dll!Microsoft.VisualStudio.Workspace.Extensions.MSBuild.MSBuildProjectHelper.CreateFileContextForProjectAsync(Microsoft.VisualStudio.Workspace.IWorkspace workspace, string projectFilePathRelative, System.Collections.Generic.IReadOnlyDictionary<string, Microsoft.VisualStudio.Workspace.Extensions.ManagedCommandLineInfo> intellisenseDataInfo, System.Threading.CancellationToken cancellationToken)  Unknown
    Microsoft.VisualStudio.Workspace.Extensions.Implementation.dll!Microsoft.VisualStudio.Workspace.Extensions.MSBuild.MSBuildManagedProjectFileContextProvider.FileContextProvider.GetContextsForFileAsync(string filePath, System.Threading.CancellationToken cancellationToken)  Unknown
    mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine) Line 1090    C#
    mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954  C#
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902  C#
    mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run() Line 1070  C#
    mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.InvokeAction(object state) Line 730   C#
    mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunCallback(System.Threading.ContextCallback callback, object state, ref System.Threading.Tasks.Task currentTask) Line 759    C#
    mscorlib.dll!System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.Run(System.Threading.Tasks.Task task, bool canInlineContinuationTask) Line 433  C#
    mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations() Line 3642    C#
    mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree() Line 2363   C#
    mscorlib.dll!System.Threading.Tasks.Task<System.__Canon>.TrySetResult(System.__Canon result) Line 490   C#
    mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Collections.Generic.IReadOnlyDictionary<string, Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>>.SetResult(System.Collections.Generic.IReadOnlyDictionary<string, Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData> result) Line 603 C#
    Microsoft.VisualStudio.Workspace.dll!Microsoft.VisualStudio.Workspace.Indexing.IIndexWorkspaceServiceHelper.GetValuesByContextAsync<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>(Microsoft.VisualStudio.Workspace.Indexing.IIndexWorkspaceService indexWorkspaceService, string filePath, System.Guid type, bool refreshOption, System.Threading.CancellationToken cancellationToken, string target)    Unknown
    mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine) Line 1090    C#
    mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954  C#
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902  C#
    mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run() Line 1070  C#
    mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.InvokeAction(object state) Line 730   C#
    mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunCallback(System.Threading.ContextCallback callback, object state, ref System.Threading.Tasks.Task currentTask) Line 759    C#
    mscorlib.dll!System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.Run(System.Threading.Tasks.Task task, bool canInlineContinuationTask) Line 433  C#
    mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations() Line 3642    C#
    mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree() Line 2363   C#
    mscorlib.dll!System.Threading.Tasks.Task<System.__Canon>.TrySetResult(System.__Canon result) Line 490   C#
    mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Collections.Generic.IEnumerable<Microsoft.VisualStudio.Workspace.Indexing.FileDataResult<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>>>.SetResult(System.Collections.Generic.IEnumerable<Microsoft.VisualStudio.Workspace.Indexing.FileDataResult<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>> result) Line 603 C#
    Microsoft.VisualStudio.Workspace.Implementation.dll!Microsoft.VisualStudio.Workspace.Indexing.IndexWorkspaceService.GetFileDataValuesAsync<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>(string filePath, System.Guid type, bool refreshOption, System.Threading.CancellationToken cancellationToken, string target, string context) Unknown
    mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine) Line 1090    C#
    mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954  C#
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902  C#
    mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run() Line 1070  C#
    mscorlib.dll!System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation..cctor.AnonymousMethod__8_0(object state) Line 388  C#
    Microsoft.VisualStudio.Threading.dll!Microsoft.VisualStudio.Threading.JoinableTaskFactory.SingleExecuteProtector.TryExecute()   Unknown
    Microsoft.VisualStudio.Threading.dll!Microsoft.VisualStudio.Threading.JoinableTaskFactory.SingleExecuteProtector..cctor.AnonymousMethod__20_0(object state) Unknown
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs)  Unknown
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Unknown
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.InvokeImpl()   Unknown
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(object state)  Unknown
    WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(object obj)   Unknown
    mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954  C#
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902  C#
    mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) Line 891    C#
    WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext executionContext, System.Threading.ContextCallback callback, object state)  Unknown
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Invoke()   Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.ProcessQueue()  Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.WndProcHook(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled)  Unknown
    WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) Unknown
    WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) Unknown
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs)  Unknown
    WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs)   Unknown

cc @sharwell @jeffkl

dup 1093593

nkolev92 commented 4 years ago

The scope of this task expanded

nkolev92 commented 4 years ago

Removing myself from the assignees...the MSBuild/SDK team is managing it.