瀏覽代碼

Fixed race in Environment.OperatingSystem and CultureInfo.NumberFormat

Brian Fiete 9 月之前
父節點
當前提交
691c147089
共有 2 個文件被更改,包括 18 次插入8 次删除
  1. 9 7
      BeefLibs/corlib/src/Environment.bf
  2. 9 1
      BeefLibs/corlib/src/Globalization/CultureInfo.bf

+ 9 - 7
BeefLibs/corlib/src/Environment.bf

@@ -19,15 +19,17 @@ namespace System
 		{
 			get
 			{
-				var osVersion = new OperatingSystem();
-				let prevValue = Interlocked.CompareExchange(ref sOSVersion, null, osVersion);
-				if (prevValue != null)
+				if (sOSVersion == null)
 				{
-					// This was already set - race condition
-					delete osVersion;
-					return prevValue;
+					var osVersion = new OperatingSystem();
+					if (let prevValue = Interlocked.CompareExchange(ref sOSVersion, null, osVersion))
+					{
+						// This was already set - race condition
+						delete osVersion;
+						return prevValue;
+					}
 				}
-				return osVersion;
+				return sOSVersion;
 			}
 		}
 

+ 9 - 1
BeefLibs/corlib/src/Globalization/CultureInfo.bf

@@ -74,7 +74,15 @@ namespace System.Globalization
 			get
 			{
 				if (mNumInfo == null)
-					mNumInfo = new NumberFormatInfo(mCultureData);
+				{
+					var numInfo = new NumberFormatInfo(mCultureData);
+					if (var prevValue = Interlocked.CompareExchange(ref mNumInfo, null, numInfo))
+					{
+						// This was already set - race condition
+						delete numInfo;
+						return prevValue;
+					}
+				}
 				return mNumInfo;
 			}
 		}