Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ internal static class SafeHandleCache<T> where T : SafeHandle
/// </summary>
internal static T GetInvalidHandle(Func<T> invalidHandleFactory)
{
T? currentHandle = Volatile.Read(ref s_invalidHandle);
if (currentHandle == null)
return s_invalidHandle ?? CreateInvalidHandle(invalidHandleFactory);

static T CreateInvalidHandle(Func<T> invalidHandleFactory)
{
T newHandle = invalidHandleFactory();
currentHandle = Interlocked.CompareExchange(ref s_invalidHandle, newHandle, null);
T? currentHandle = Interlocked.CompareExchange(ref s_invalidHandle, newHandle, null);

if (currentHandle == null)
{
GC.SuppressFinalize(newHandle);
Expand All @@ -35,9 +37,10 @@ internal static T GetInvalidHandle(Func<T> invalidHandleFactory)
{
newHandle.Dispose();
}

Debug.Assert(currentHandle.IsInvalid);
return currentHandle;
}
Debug.Assert(currentHandle.IsInvalid);
return currentHandle;
}

/// <summary>Gets whether the specified handle is invalid handle.</summary>
Expand All @@ -46,7 +49,7 @@ internal static T GetInvalidHandle(Func<T> invalidHandleFactory)
internal static bool IsCachedInvalidHandle(SafeHandle handle)
{
Debug.Assert(handle != null);
bool isCachedInvalidHandle = ReferenceEquals(handle, Volatile.Read(ref s_invalidHandle));
bool isCachedInvalidHandle = ReferenceEquals(handle, s_invalidHandle);
Debug.Assert(!isCachedInvalidHandle || handle.IsInvalid, "The cached invalid handle must still be invalid.");
return isCachedInvalidHandle;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,38 +8,38 @@ namespace System.Security.Cryptography
{
internal static partial class Oids
{
private static volatile Oid? s_rsaOid;
private static volatile Oid? s_ecPublicKeyOid;
private static volatile Oid? s_tripleDesCbcOid;
private static volatile Oid? s_aes256CbcOid;
private static volatile Oid? s_secp256R1Oid;
private static volatile Oid? s_secp384R1Oid;
private static volatile Oid? s_secp521R1Oid;
private static volatile Oid? s_sha256Oid;
private static volatile Oid? s_pkcs7DataOid;
private static volatile Oid? s_contentTypeOid;
private static volatile Oid? s_documentDescriptionOid;
private static volatile Oid? s_documentNameOid;
private static volatile Oid? s_localKeyIdOid;
private static volatile Oid? s_messageDigestOid;
private static volatile Oid? s_signingTimeOid;
private static volatile Oid? s_pkcs9ExtensionRequestOid;
private static volatile Oid? s_basicConstraints2Oid;
private static volatile Oid? s_enhancedKeyUsageOid;
private static volatile Oid? s_keyUsageOid;
private static volatile Oid? s_subjectAltNameOid;
private static volatile Oid? s_subjectKeyIdentifierOid;
private static volatile Oid? s_authorityKeyIdentifierOid;
private static volatile Oid? s_authorityInformationAccessOid;
private static volatile Oid? s_crlNumberOid;
private static volatile Oid? s_crlDistributionPointOid;
private static volatile Oid? s_commonNameOid;
private static volatile Oid? s_countryOrRegionOid;
private static volatile Oid? s_localityNameOid;
private static volatile Oid? s_stateOrProvinceNameOid;
private static volatile Oid? s_organizationOid;
private static volatile Oid? s_organizationalUnitOid;
private static volatile Oid? s_emailAddressOid;
private static Oid? s_rsaOid;
private static Oid? s_ecPublicKeyOid;
private static Oid? s_tripleDesCbcOid;
private static Oid? s_aes256CbcOid;
private static Oid? s_secp256R1Oid;
private static Oid? s_secp384R1Oid;
private static Oid? s_secp521R1Oid;
private static Oid? s_sha256Oid;
private static Oid? s_pkcs7DataOid;
private static Oid? s_contentTypeOid;
private static Oid? s_documentDescriptionOid;
private static Oid? s_documentNameOid;
private static Oid? s_localKeyIdOid;
private static Oid? s_messageDigestOid;
private static Oid? s_signingTimeOid;
private static Oid? s_pkcs9ExtensionRequestOid;
private static Oid? s_basicConstraints2Oid;
private static Oid? s_enhancedKeyUsageOid;
private static Oid? s_keyUsageOid;
private static Oid? s_subjectAltNameOid;
private static Oid? s_subjectKeyIdentifierOid;
private static Oid? s_authorityKeyIdentifierOid;
private static Oid? s_authorityInformationAccessOid;
private static Oid? s_crlNumberOid;
private static Oid? s_crlDistributionPointOid;
private static Oid? s_commonNameOid;
private static Oid? s_countryOrRegionOid;
private static Oid? s_localityNameOid;
private static Oid? s_stateOrProvinceNameOid;
private static Oid? s_organizationOid;
private static Oid? s_organizationalUnitOid;
private static Oid? s_emailAddressOid;

internal static Oid RsaOid => s_rsaOid ??= InitializeOid(Rsa);
internal static Oid EcPublicKeyOid => s_ecPublicKeyOid ??= InitializeOid(EcPublicKey);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ internal sealed class UnnamedOptionsManager<[DynamicallyAccessedMembers(Options.
where TOptions : class
{
private readonly IOptionsFactory<TOptions> _factory;
private volatile object? _syncObj;
private object? _syncObj;
private volatile TOptions? _value;

public UnnamedOptionsManager(IOptionsFactory<TOptions> factory) => _factory = factory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ public sealed partial class RegistryKey : MarshalByRefObject, IDisposable
private const int MaxKeyLength = 255;
private const int MaxValueLength = 16383;

private volatile SafeRegistryHandle _hkey;
private volatile string _keyName;
private SafeRegistryHandle _hkey;
private string _keyName;
private readonly bool _remoteKey;
private volatile StateFlags _state;
private volatile RegistryKeyPermissionCheck _checkMode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace System.Collections
public class CaseInsensitiveComparer : IComparer
{
private readonly CompareInfo _compareInfo;
private static volatile CaseInsensitiveComparer? s_InvariantCaseInsensitiveComparer;
private static CaseInsensitiveComparer? s_InvariantCaseInsensitiveComparer;

public CaseInsensitiveComparer()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace System.Collections
[Obsolete("CaseInsensitiveHashCodeProvider has been deprecated. Use StringComparer instead.")]
public class CaseInsensitiveHashCodeProvider : IHashCodeProvider
{
private static volatile CaseInsensitiveHashCodeProvider? s_invariantCaseInsensitiveHashCodeProvider;
private static CaseInsensitiveHashCodeProvider? s_invariantCaseInsensitiveHashCodeProvider;
private readonly CompareInfo _compareInfo;

public CaseInsensitiveHashCodeProvider()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,22 @@ namespace System.ComponentModel
[AttributeUsage(AttributeTargets.All)]
public class CategoryAttribute : Attribute
{
private static volatile CategoryAttribute? s_action;
private static volatile CategoryAttribute? s_appearance;
private static volatile CategoryAttribute? s_asynchronous;
private static volatile CategoryAttribute? s_behavior;
private static volatile CategoryAttribute? s_data;
private static volatile CategoryAttribute? s_design;
private static volatile CategoryAttribute? s_dragDrop;
private static volatile CategoryAttribute? s_defAttr;
private static volatile CategoryAttribute? s_focus;
private static volatile CategoryAttribute? s_format;
private static volatile CategoryAttribute? s_key;
private static volatile CategoryAttribute? s_layout;
private static volatile CategoryAttribute? s_mouse;
private static volatile CategoryAttribute? s_windowStyle;

private bool _localized;
private static CategoryAttribute? s_action;
private static CategoryAttribute? s_appearance;
private static CategoryAttribute? s_asynchronous;
private static CategoryAttribute? s_behavior;
private static CategoryAttribute? s_data;
private static CategoryAttribute? s_design;
private static CategoryAttribute? s_dragDrop;
private static CategoryAttribute? s_defAttr;
private static CategoryAttribute? s_focus;
private static CategoryAttribute? s_format;
private static CategoryAttribute? s_key;
private static CategoryAttribute? s_layout;
private static CategoryAttribute? s_mouse;
private static CategoryAttribute? s_windowStyle;

private volatile bool _localized;

private readonly object _locker = new object();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class XmlWriterTraceListener : TextWriterTraceListener
{
private const string FixedHeader = "<E2ETraceEvent xmlns=\"http://schemas.microsoft.com/2004/06/E2ETraceEvent\"><System xmlns=\"http://schemas.microsoft.com/2004/06/windows/eventlog/system\">";

private static volatile string? s_processName;
private static string? s_processName;
private readonly string _machineName = Environment.MachineName;
private StringBuilder? _strBldr;
private XmlTextWriter? _xmlBlobWriter;
Expand Down Expand Up @@ -252,13 +252,15 @@ private void WriteEndHeader()
{
if (OperatingSystem.IsBrowser()) // Process isn't supported on Browser
{
s_processName = processName = string.Empty;
processName = string.Empty;
}
else
{
using Process process = Process.GetCurrentProcess();
s_processName = processName = process.ProcessName;
processName = process.ProcessName;
}

s_processName = processName;
}

InternalWrite("\" />");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -776,15 +776,10 @@ protected internal override Task<HttpResponseMessage> SendAsync(HttpRequestMessa
// lazy-load the validator func so it can be trimmed by the ILLinker if it isn't used.
private static Func<HttpRequestMessage, X509Certificate2?, X509Chain?, SslPolicyErrors, bool>? s_dangerousAcceptAnyServerCertificateValidator;
[UnsupportedOSPlatform("browser")]
public static Func<HttpRequestMessage, X509Certificate2?, X509Chain?, SslPolicyErrors, bool> DangerousAcceptAnyServerCertificateValidator
{
get
{
return Volatile.Read(ref s_dangerousAcceptAnyServerCertificateValidator) ??
Interlocked.CompareExchange(ref s_dangerousAcceptAnyServerCertificateValidator, delegate { return true; }, null) ??
s_dangerousAcceptAnyServerCertificateValidator;
}
}
public static Func<HttpRequestMessage, X509Certificate2?, X509Chain?, SslPolicyErrors, bool> DangerousAcceptAnyServerCertificateValidator =>
s_dangerousAcceptAnyServerCertificateValidator ??
Interlocked.CompareExchange(ref s_dangerousAcceptAnyServerCertificateValidator, delegate { return true; }, null) ??
s_dangerousAcceptAnyServerCertificateValidator;

private void ThrowForModifiedManagedSslOptionsIfStarted()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ protected internal override Task<HttpResponseMessage> SendAsync(HttpRequestMessa
private static Func<HttpRequestMessage, X509Certificate2?, X509Chain?, SslPolicyErrors, bool>? s_dangerousAcceptAnyServerCertificateValidator;
[UnsupportedOSPlatform("browser")]
public static Func<HttpRequestMessage, X509Certificate2?, X509Chain?, SslPolicyErrors, bool> DangerousAcceptAnyServerCertificateValidator =>
Volatile.Read(ref s_dangerousAcceptAnyServerCertificateValidator) ??
s_dangerousAcceptAnyServerCertificateValidator ??
Interlocked.CompareExchange(ref s_dangerousAcceptAnyServerCertificateValidator, delegate { return true; }, null) ??
s_dangerousAcceptAnyServerCertificateValidator;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,18 +96,10 @@ internal void TrackOption(SocketOptionLevel level, SocketOptionName name)
ExposedHandleOrUntrackedConfiguration = true;
}

internal SocketAsyncContext AsyncContext
{
get
{
if (Volatile.Read(ref _asyncContext) == null)
{
Interlocked.CompareExchange(ref _asyncContext, new SocketAsyncContext(this), null);
}

return _asyncContext!;
}
}
internal SocketAsyncContext AsyncContext =>
_asyncContext ??
Interlocked.CompareExchange(ref _asyncContext, new SocketAsyncContext(this), null) ??
_asyncContext!;

/// <summary>
/// This represents whether the Socket instance is blocking or non-blocking *from the user's point of view*,
Expand Down
6 changes: 2 additions & 4 deletions src/libraries/System.Private.CoreLib/src/System/AppDomain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -414,8 +414,7 @@ public void SetThreadPrincipal(IPrincipal principal)
Debug.Assert(mi != null);
// Don't throw PNSE if null like for WindowsPrincipal as UnauthenticatedPrincipal should
// be available on all platforms.
Volatile.Write(ref s_getUnauthenticatedPrincipal,
mi.CreateDelegate<Func<IPrincipal>>());
s_getUnauthenticatedPrincipal = mi.CreateDelegate<Func<IPrincipal>>();
}

principal = s_getUnauthenticatedPrincipal();
Expand All @@ -430,8 +429,7 @@ public void SetThreadPrincipal(IPrincipal principal)
{
throw new PlatformNotSupportedException(SR.PlatformNotSupported_Principal);
}
Volatile.Write(ref s_getWindowsPrincipal,
mi.CreateDelegate<Func<IPrincipal>>());
s_getWindowsPrincipal = mi.CreateDelegate<Func<IPrincipal>>();
}

principal = s_getWindowsPrincipal();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ static bool TryConvertFromInvariantString(
{
Type? typeDescriptorType = Type.GetType("System.ComponentModel.TypeDescriptor, System.ComponentModel.TypeConverter", throwOnError: false);
MethodInfo? mi = typeDescriptorType?.GetMethod("ConvertFromInvariantString", BindingFlags.NonPublic | BindingFlags.Static);
Volatile.Write(ref s_convertFromInvariantString, mi == null ? new object() : mi.CreateDelegate<Func<Type, string, object>>());
s_convertFromInvariantString = mi == null ? new object() : mi.CreateDelegate<Func<Type, string, object>>();
}

if (!(s_convertFromInvariantString is Func<Type, string?, object> convertFromInvariantString))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ static UnicodeCategoryConditions()

/// <summary>Gets a <see cref="BDD"/> that represents the specified <see cref="UnicodeCategory"/>.</summary>
public static BDD GetCategory(UnicodeCategory category) =>
Volatile.Read(ref s_categories[(int)category]) ??
s_categories[(int)category] ??
Interlocked.CompareExchange(ref s_categories[(int)category], BDD.Deserialize(UnicodeCategoryRanges.GetSerializedCategory(category)), null) ??
s_categories[(int)category]!;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ namespace System.Media
{
public static class SystemSounds
{
private static volatile SystemSound? s_asterisk;
private static volatile SystemSound? s_beep;
private static volatile SystemSound? s_exclamation;
private static volatile SystemSound? s_hand;
private static volatile SystemSound? s_question;
private static SystemSound? s_asterisk;
private static SystemSound? s_beep;
private static SystemSound? s_exclamation;
private static SystemSound? s_hand;
private static SystemSound? s_question;

public static SystemSound Asterisk
{
Expand Down