From fff2d0a787daa3419d311b94db5b78d35d8a24c8 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Mon, 15 Feb 2021 17:53:36 +0100 Subject: [PATCH] Fix assertions on AssemblyList.Sort and AssemblyList.Unload. Fix hang on LoadDependencies.Execute. --- ILSpy/AssemblyList.cs | 8 ++++---- ILSpy/TreeNodes/AssemblyTreeNode.cs | 7 +++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ILSpy/AssemblyList.cs b/ILSpy/AssemblyList.cs index b7a4c9177..f2aa07c5b 100644 --- a/ILSpy/AssemblyList.cs +++ b/ILSpy/AssemblyList.cs @@ -329,7 +329,7 @@ namespace ICSharpCode.ILSpy return null; var newAsm = new LoadedAssembly(this, target.FileName, pdbFileName: target.PdbFileName); newAsm.IsAutoLoaded = target.IsAutoLoaded; - lock (assemblies) + lock (lockObj) { this.assemblies.Remove(target); this.assemblies.Insert(index, newAsm); @@ -340,7 +340,7 @@ namespace ICSharpCode.ILSpy public void Unload(LoadedAssembly assembly) { App.Current.Dispatcher.VerifyAccess(); - lock (assemblies) + lock (lockObj) { assemblies.Remove(assembly); byFilename.Remove(assembly.FileName); @@ -350,7 +350,7 @@ namespace ICSharpCode.ILSpy static bool gcRequested; - void RequestGC() + static void RequestGC() { if (gcRequested) return; @@ -370,7 +370,7 @@ namespace ICSharpCode.ILSpy public void Sort(int index, int count, IComparer comparer) { App.Current.Dispatcher.VerifyAccess(); - lock (assemblies) + lock (lockObj) { List list = new List(assemblies); list.Sort(index, Math.Min(count, list.Count - index), comparer); diff --git a/ILSpy/TreeNodes/AssemblyTreeNode.cs b/ILSpy/TreeNodes/AssemblyTreeNode.cs index 8dba58e8a..036879ca5 100644 --- a/ILSpy/TreeNodes/AssemblyTreeNode.cs +++ b/ILSpy/TreeNodes/AssemblyTreeNode.cs @@ -20,6 +20,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; @@ -460,10 +461,11 @@ namespace ICSharpCode.ILSpy.TreeNodes return true; } - public void Execute(TextViewContext context) + public async void Execute(TextViewContext context) { if (context.SelectedTreeNodes == null) return; + var tasks = new List(); foreach (var node in context.SelectedTreeNodes) { var la = ((AssemblyTreeNode)node).LoadedAssembly; @@ -474,10 +476,11 @@ namespace ICSharpCode.ILSpy.TreeNodes var metadata = module.Metadata; foreach (var assyRef in metadata.AssemblyReferences) { - resolver.Resolve(new AssemblyReference(module, assyRef)); + tasks.Add(resolver.ResolveAsync(new AssemblyReference(module, assyRef))); } } } + await Task.WhenAll(tasks); MainWindow.Instance.RefreshDecompiledView(); } }