Browse Source

Fix assertions on AssemblyList.Sort and AssemblyList.Unload. Fix hang on LoadDependencies.Execute.

pull/2301/head
Siegfried Pammer 4 years ago
parent
commit
fff2d0a787
  1. 8
      ILSpy/AssemblyList.cs
  2. 7
      ILSpy/TreeNodes/AssemblyTreeNode.cs

8
ILSpy/AssemblyList.cs

@ -329,7 +329,7 @@ namespace ICSharpCode.ILSpy @@ -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 @@ -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 @@ -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 @@ -370,7 +370,7 @@ namespace ICSharpCode.ILSpy
public void Sort(int index, int count, IComparer<LoadedAssembly> comparer)
{
App.Current.Dispatcher.VerifyAccess();
lock (assemblies)
lock (lockObj)
{
List<LoadedAssembly> list = new List<LoadedAssembly>(assemblies);
list.Sort(index, Math.Min(count, list.Count - index), comparer);

7
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -20,6 +20,7 @@ using System; @@ -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 @@ -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<Task>();
foreach (var node in context.SelectedTreeNodes)
{
var la = ((AssemblyTreeNode)node).LoadedAssembly;
@ -474,10 +476,11 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -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();
}
}

Loading…
Cancel
Save