diff options
author | Atsushi Eno <atsushieno@veritas-vos-liberabit.com> | 2013-12-05 13:08:29 +0400 |
---|---|---|
committer | Atsushi Eno <atsushieno@veritas-vos-liberabit.com> | 2013-12-05 13:08:29 +0400 |
commit | 62712bc64bc92f84cb33344c0af05634b305756a (patch) | |
tree | 6f3b8b2f7a58851a2c8d0e7e09e5accf06a85fd1 /mcs/class/Microsoft.Build.Engine | |
parent | 3b664f331fe8a1920e88437d91b715775dc789f6 (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.cs | 15 |
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; } |