From f11b28372597c20643d9a6494f7a7bb1f35c539e Mon Sep 17 00:00:00 2001 From: Ian Hays Date: Thu, 30 Jun 2016 11:16:33 -0700 Subject: [PATCH] Add locks to WinRT Console Color functions Commit migrated from https://github.com/dotnet/corefx/commit/a09e463dbe562603417b45855efdab55023eb2d3 --- src/libraries/System.Console/src/System/Console.cs | 2 ++ .../System.Console/src/System/ConsolePal.Unix.cs | 15 ++++----- .../System.Console/src/System/ConsolePal.WinRT.cs | 38 +++++++++++++++++----- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/libraries/System.Console/src/System/Console.cs b/src/libraries/System.Console/src/System/Console.cs index 59149252..8b023a1 100644 --- a/src/libraries/System.Console/src/System/Console.cs +++ b/src/libraries/System.Console/src/System/Console.cs @@ -193,6 +193,8 @@ namespace System public static bool CapsLock { get { return ConsolePal.CapsLock; } } + internal const ConsoleColor UnknownColor = (ConsoleColor)(-1); + public static ConsoleColor BackgroundColor { get { return ConsolePal.BackgroundColor; } diff --git a/src/libraries/System.Console/src/System/ConsolePal.Unix.cs b/src/libraries/System.Console/src/System/ConsolePal.Unix.cs index 994610b..acf288a 100644 --- a/src/libraries/System.Console/src/System/ConsolePal.Unix.cs +++ b/src/libraries/System.Console/src/System/ConsolePal.Unix.cs @@ -125,9 +125,8 @@ namespace System } } - private const ConsoleColor UnknownColor = (ConsoleColor)(-1); - private static ConsoleColor s_trackedForegroundColor = UnknownColor; - private static ConsoleColor s_trackedBackgroundColor = UnknownColor; + private static ConsoleColor s_trackedForegroundColor = Console.UnknownColor; + private static ConsoleColor s_trackedBackgroundColor = Console.UnknownColor; public static ConsoleColor ForegroundColor { @@ -145,8 +144,8 @@ namespace System { lock (Console.Out) // synchronize with other writers { - s_trackedForegroundColor = UnknownColor; - s_trackedBackgroundColor = UnknownColor; + s_trackedForegroundColor = Console.UnknownColor; + s_trackedBackgroundColor = Console.UnknownColor; WriteResetColorString(); } } @@ -504,7 +503,7 @@ namespace System /// private static void RefreshColors(ref ConsoleColor toChange, ConsoleColor value) { - if (((int)value & ~0xF) != 0 && value != UnknownColor) + if (((int)value & ~0xF) != 0 && value != Console.UnknownColor) { throw new ArgumentException(SR.Arg_InvalidConsoleColor); } @@ -515,12 +514,12 @@ namespace System WriteResetColorString(); - if (s_trackedForegroundColor != UnknownColor) + if (s_trackedForegroundColor != Console.UnknownColor) { WriteSetColorString(foreground: true, color: s_trackedForegroundColor); } - if (s_trackedBackgroundColor != UnknownColor) + if (s_trackedBackgroundColor != Console.UnknownColor) { WriteSetColorString(foreground: false, color: s_trackedBackgroundColor); } diff --git a/src/libraries/System.Console/src/System/ConsolePal.WinRT.cs b/src/libraries/System.Console/src/System/ConsolePal.WinRT.cs index 4853d07..a1558d0 100644 --- a/src/libraries/System.Console/src/System/ConsolePal.WinRT.cs +++ b/src/libraries/System.Console/src/System/ConsolePal.WinRT.cs @@ -82,26 +82,46 @@ namespace System set { throw new PlatformNotSupportedException(); } } - private const ConsoleColor UnknownColor = (ConsoleColor)(-1); - private static ConsoleColor s_trackedForegroundColor = UnknownColor; - private static ConsoleColor s_trackedBackgroundColor = UnknownColor; + private static ConsoleColor s_trackedForegroundColor = Console.UnknownColor; + private static ConsoleColor s_trackedBackgroundColor = Console.UnknownColor; public static ConsoleColor ForegroundColor { - get { return s_trackedForegroundColor; } - set { s_trackedForegroundColor = value; } + get + { + return s_trackedForegroundColor; + } + set + { + lock (Console.Out) // synchronize with other writers + { + s_trackedForegroundColor = value; + } + } } public static ConsoleColor BackgroundColor { - get { return s_trackedBackgroundColor; } - set { s_trackedBackgroundColor = value; } + get + { + return s_trackedBackgroundColor; + } + set + { + lock (Console.Out) // synchronize with other writers + { + s_trackedBackgroundColor = value; + } + } } public static void ResetColor() { - s_trackedForegroundColor = UnknownColor; - s_trackedBackgroundColor = UnknownColor; + lock (Console.Out) // synchronize with other writers + { + s_trackedForegroundColor = Console.UnknownColor; + s_trackedBackgroundColor = Console.UnknownColor; + } } public static bool NumberLock { get { throw new PlatformNotSupportedException(); } } -- 2.7.4