From 08308c57292a3d83785af399f874f2813b18953a Mon Sep 17 00:00:00 2001 From: Daniel Grunwald <daniel@danielgrunwald.de> Date: Fri, 26 Mar 2010 21:05:49 +0000 Subject: [PATCH] Make verbose MSBuild output even more verbose. Fixed potential deadlock between IProjectContent.ReferencedContents lock and IProject.SyncRoot when switching a project to another target framework. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5644 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs | 1 + .../Src/Services/ParserService/ParseProjectContent.cs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs index 41a052c885..a5e1f26fa8 100755 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs @@ -223,6 +223,7 @@ namespace ICSharpCode.SharpDevelop.Project this.ReportTargetStartedEvents = true; this.ReportUnknownEvents = true; loggers.Add(new SDConsoleLogger(feedbackSink, LoggerVerbosity.Diagnostic)); + globalProperties["MSBuildTargetsVerbose"] = "true"; } //loggers.Add(new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic)); foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) { diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs index 0e656341f3..9ed721623b 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs @@ -82,9 +82,12 @@ namespace ICSharpCode.SharpDevelop internal void ReInitialize1(IProgressMonitor progressMonitor) { + var mscorlib = AssemblyParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib; + // don't fetch mscorlib within lock - finding the correct registry might access the project, causing + // a deadlock between IProject.SyncRoot and the ReferencedContents lock lock (ReferencedContents) { ReferencedContents.Clear(); - AddReferencedContent(AssemblyParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib); + AddReferencedContent(mscorlib); } // prevent adding event handler twice ProjectService.ProjectItemAdded -= OnProjectItemAdded;