Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtsushi Eno <atsushieno@veritas-vos-liberabit.com>2013-12-05 13:08:29 +0400
committerAtsushi Eno <atsushieno@veritas-vos-liberabit.com>2013-12-05 13:08:29 +0400
commit62712bc64bc92f84cb33344c0af05634b305756a (patch)
tree6f3b8b2f7a58851a2c8d0e7e09e5accf06a85fd1 /mcs/class/Microsoft.Build.Engine
parent3b664f331fe8a1920e88437d91b715775dc789f6 (diff)
In ConsoleLogger, add workaround for bogus use of EventSource senders in MS.Build.Engine.
See comments for details.
Diffstat (limited to 'mcs/class/Microsoft.Build.Engine')
-rw-r--r--mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs15
1 files changed, 11 insertions, 4 deletions
diff --git a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
index 5e6e8b54e4a..da51211c310 100644
--- a/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
+++ b/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ConsoleLogger.cs
@@ -279,14 +279,21 @@ namespace Microsoft.Build.BuildEngine
Dictionary<object,BuildRecord> build_records = new Dictionary<object, BuildRecord> ();
+ object dummy_key = new object ();
+
BuildRecord GetBuildRecord (object sender)
{
- if (sender == null)
- throw new ArgumentNullException ("sender");
BuildRecord r;
- if (!build_records.TryGetValue (sender, out r)) {
+ // FIXME: our Microsoft.Build.Engine shouldn't give different "sender" object for each event
+ // during the same build run. But it actually does.
+ // It is problematic for parallel build because it is impossible to determine right "ongoing build"
+ // record for the event without correct sender object.
+ // Hence we expect sender as a valid object only if it is IBuildEngine4 -
+ // only Microsoft.Build.Internal.BuildEngine4 implements it so far.
+ var key = sender as IBuildEngine4 ?? dummy_key;
+ if (!build_records.TryGetValue (key, out r)) {
r = new BuildRecord (this);
- build_records.Add (sender, r);
+ build_records.Add (key, r);
}
return r;
}