diff options
author | Jan Kotas <jkotas@microsoft.com> | 2017-04-11 17:44:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-11 17:44:40 -0700 |
commit | c85c19baef5edf867c3a9a217cbe235a892d0c1e (patch) | |
tree | 1e3b1c78f5dbee30d3e1d3c14c3a8020df47046e /src | |
parent | dfa6c6f442e1cf5a49b6a97c02bbb83373920af7 (diff) | |
download | coreclr-c85c19baef5edf867c3a9a217cbe235a892d0c1e.tar.gz coreclr-c85c19baef5edf867c3a9a217cbe235a892d0c1e.tar.bz2 coreclr-c85c19baef5edf867c3a9a217cbe235a892d0c1e.zip |
Move files to shared CoreLib partition (#10885)
Diffstat (limited to 'src')
38 files changed, 432 insertions, 643 deletions
diff --git a/src/mscorlib/System.Private.CoreLib.csproj b/src/mscorlib/System.Private.CoreLib.csproj index 14f0c7b51e..3a0917f75e 100644 --- a/src/mscorlib/System.Private.CoreLib.csproj +++ b/src/mscorlib/System.Private.CoreLib.csproj @@ -493,37 +493,19 @@ <Compile Include="$(BclSourcesRoot)\System\Globalization\GlobalizationAssembly.cs" /> </ItemGroup> <ItemGroup> - <Compile Include="$(BclSourcesRoot)\System\Threading\AbandonedMutexException.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\AsyncLocal.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\AutoResetEvent.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\SendOrPostCallback.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\SynchronizationContext.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\EventResetMode.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\EventWaitHandle.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ExecutionContext.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Interlocked.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\LockRecursionException.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ManualResetEvent.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Monitor.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Mutex.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Overlapped.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ParameterizedThreadStart.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Semaphore.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\SemaphoreFullException.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\SynchronizationLockException.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Thread.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\ThreadInterruptedException.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\ThreadPool.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ThreadPriority.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ThreadStart.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ThreadState.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ThreadStateException.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ThreadStartException.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Timer.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\Volatile.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\WaitHandle.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\WaitHandleCannotBeOpenedException.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Threading\ApartmentState.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\SpinLock.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\SpinWait.cs" /> <Compile Include="$(BclSourcesRoot)\System\Threading\LazyInitializer.cs" /> @@ -617,15 +599,7 @@ <ItemGroup> <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\FormatterConverter.cs" /> <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\FormatterServices.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\IDeserializationCallback.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationAttributes.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationException.cs" /> <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationInfo.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\SerializationInfoEnumerator.cs" /> - <Compile Include="$(BclSourcesRoot)\System\Runtime\Serialization\StreamingContext.cs" /> - </ItemGroup> - <ItemGroup> - <Compile Include="$(BclSourcesRoot)\System\Runtime\Versioning\NonVersionableAttribute.cs" /> </ItemGroup> <ItemGroup> <Compile Include="$(BclSourcesRoot)\System\Runtime\Remoting\ObjectHandle.cs" /> diff --git a/src/mscorlib/shared/System.Private.CoreLib.Shared.projitems b/src/mscorlib/shared/System.Private.CoreLib.Shared.projitems index a481ef41db..6ef7fc1681 100644 --- a/src/mscorlib/shared/System.Private.CoreLib.Shared.projitems +++ b/src/mscorlib/shared/System.Private.CoreLib.Shared.projitems @@ -307,11 +307,21 @@ <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\InteropServices\UnmanagedFunctionPointerAttribute.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\InteropServices\UnmanagedType.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\InteropServices\VarEnum.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\IDeserializationCallback.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\IFormatterConverter.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\IObjectReference.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\ISafeSerializationData.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\ISerializable.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\OnDeserializedAttribute.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\OnDeserializingAttribute.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\OnSerializedAttribute.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\OnSerializingAttribute.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\OptionalFieldAttribute.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\SafeSerializationEventArgs.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\SerializationException.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\SerializationInfoEnumerator.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Serialization\StreamingContext.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Versioning\NonVersionableAttribute.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\Versioning\TargetFrameworkAttribute.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Security\AllowPartiallyTrustedCallersAttribute.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Security\CryptographicException.cs"/> @@ -345,12 +355,32 @@ <Compile Include="$(MSBuildThisFileDirectory)System\Text\UTF8Encoding.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Text\UnicodeEncoding.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\ThreadAttributes.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\AbandonedMutexException.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ApartmentState.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\AsyncLocal.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\AutoResetEvent.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Threading\DeferredDisposableLifetime.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\EventResetMode.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ExecutionContext.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\LazyThreadSafetyMode.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\LockRecursionException.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ManualResetEvent.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ParameterizedThreadStart.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\SemaphoreFullException.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\SendOrPostCallback.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\SynchronizationLockException.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Threading\Tasks\TaskCanceledException.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Threading\Tasks\TaskExtensions.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Threading\Tasks\TaskSchedulerException.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ThreadAbortException.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ThreadPriority.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ThreadStart.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ThreadStartException.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ThreadState.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\ThreadStateException.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\Threading\Timeout.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\TimeoutHelper.cs"/> + <Compile Include="$(MSBuildThisFileDirectory)System\Threading\WaitHandleCannotBeOpenedException.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\ThreadStaticAttribute.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\TimeoutException.cs"/> <Compile Include="$(MSBuildThisFileDirectory)System\TimeZone.cs"/> diff --git a/src/mscorlib/shared/System/Runtime/Serialization/IDeserializationCallback.cs b/src/mscorlib/shared/System/Runtime/Serialization/IDeserializationCallback.cs new file mode 100644 index 0000000000..a1c1671a8b --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/IDeserializationCallback.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.Serialization +{ + public interface IDeserializationCallback + { + void OnDeserialization(object sender); + } +} diff --git a/src/mscorlib/shared/System/Runtime/Serialization/OnDeserializedAttribute.cs b/src/mscorlib/shared/System/Runtime/Serialization/OnDeserializedAttribute.cs new file mode 100644 index 0000000000..408a55ccf9 --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/OnDeserializedAttribute.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.Serialization +{ + [AttributeUsage(AttributeTargets.Method, Inherited = false)] + public sealed class OnDeserializedAttribute : Attribute + { + } +} diff --git a/src/mscorlib/shared/System/Runtime/Serialization/OnDeserializingAttribute.cs b/src/mscorlib/shared/System/Runtime/Serialization/OnDeserializingAttribute.cs new file mode 100644 index 0000000000..162857e8d3 --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/OnDeserializingAttribute.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.Serialization +{ + [AttributeUsage(AttributeTargets.Method, Inherited = false)] + public sealed class OnDeserializingAttribute : Attribute + { + } +} diff --git a/src/mscorlib/shared/System/Runtime/Serialization/OnSerializedAttribute.cs b/src/mscorlib/shared/System/Runtime/Serialization/OnSerializedAttribute.cs new file mode 100644 index 0000000000..020dd0257c --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/OnSerializedAttribute.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.Serialization +{ + [AttributeUsage(AttributeTargets.Method, Inherited = false)] + public sealed class OnSerializedAttribute : Attribute + { + } +} diff --git a/src/mscorlib/shared/System/Runtime/Serialization/OnSerializingAttribute.cs b/src/mscorlib/shared/System/Runtime/Serialization/OnSerializingAttribute.cs new file mode 100644 index 0000000000..8dc8af3f23 --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/OnSerializingAttribute.cs @@ -0,0 +1,11 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.Serialization +{ + [AttributeUsage(AttributeTargets.Method, Inherited = false)] + public sealed class OnSerializingAttribute : Attribute + { + } +} diff --git a/src/mscorlib/shared/System/Runtime/Serialization/OptionalFieldAttribute.cs b/src/mscorlib/shared/System/Runtime/Serialization/OptionalFieldAttribute.cs new file mode 100644 index 0000000000..84daa539be --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/OptionalFieldAttribute.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.Serialization +{ + [AttributeUsage(AttributeTargets.Field, Inherited = false)] + public sealed class OptionalFieldAttribute : Attribute + { + private int _versionAdded = 1; + + public int VersionAdded + { + get { return _versionAdded; } + set + { + if (value < 1) + { + throw new ArgumentException(SR.Serialization_OptionalFieldVersionValue); + } + _versionAdded = value; + } + } + } +} diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs b/src/mscorlib/shared/System/Runtime/Serialization/SerializationException.cs index 48de8a7b5b..83cf2c64e1 100644 --- a/src/mscorlib/src/System/Runtime/Serialization/SerializationException.cs +++ b/src/mscorlib/shared/System/Runtime/Serialization/SerializationException.cs @@ -2,18 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -/*============================================================================= -** -** -** -** Purpose: Thrown when something goes wrong during serialization or -** deserialization. -** -** -=============================================================================*/ - - -using System; using System.Runtime.Serialization; namespace System.Runtime.Serialization @@ -21,12 +9,12 @@ namespace System.Runtime.Serialization [Serializable] public class SerializationException : SystemException { - private static String _nullMessage = SR.Arg_SerializationException; + private static String s_nullMessage = SR.Arg_SerializationException; // Creates a new SerializationException with its message // string set to a default message. public SerializationException() - : base(_nullMessage) + : base(s_nullMessage) { HResult = __HResults.COR_E_SERIALIZATION; } @@ -37,12 +25,14 @@ namespace System.Runtime.Serialization HResult = __HResults.COR_E_SERIALIZATION; } - public SerializationException(String message, Exception innerException) : base(message, innerException) + public SerializationException(String message, Exception innerException) + : base(message, innerException) { HResult = __HResults.COR_E_SERIALIZATION; } - protected SerializationException(SerializationInfo info, StreamingContext context) : base(info, context) + protected SerializationException(SerializationInfo info, StreamingContext context) + : base(info, context) { } } diff --git a/src/mscorlib/shared/System/Runtime/Serialization/SerializationInfoEnumerator.cs b/src/mscorlib/shared/System/Runtime/Serialization/SerializationInfoEnumerator.cs new file mode 100644 index 0000000000..6399510736 --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/SerializationInfoEnumerator.cs @@ -0,0 +1,127 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections; +using System.Diagnostics; + +namespace System.Runtime.Serialization +{ + public struct SerializationEntry + { + private string _name; + private object _value; + private Type _type; + + internal SerializationEntry(string entryName, object entryValue, Type entryType) + { + _name = entryName; + _value = entryValue; + _type = entryType; + } + + public object Value => _value; + public string Name => _name; + public Type ObjectType => _type; + } + + public sealed class SerializationInfoEnumerator : IEnumerator + { + private readonly string[] _members; + private readonly object[] _data; + private readonly Type[] _types; + private readonly int _numItems; + private int _currItem; + private bool _current; + + internal SerializationInfoEnumerator(string[] members, object[] info, Type[] types, int numItems) + { + Debug.Assert(members != null, "[SerializationInfoEnumerator.ctor]members!=null"); + Debug.Assert(info != null, "[SerializationInfoEnumerator.ctor]info!=null"); + Debug.Assert(types != null, "[SerializationInfoEnumerator.ctor]types!=null"); + Debug.Assert(numItems >= 0, "[SerializationInfoEnumerator.ctor]numItems>=0"); + Debug.Assert(members.Length >= numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); + Debug.Assert(info.Length >= numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); + Debug.Assert(types.Length >= numItems, "[SerializationInfoEnumerator.ctor]types.Length>=numItems"); + + _members = members; + _data = info; + _types = types; + + //The MoveNext semantic is much easier if we enforce that [0..m_numItems] are valid entries + //in the enumerator, hence we subtract 1. + _numItems = numItems - 1; + _currItem = -1; + _current = false; + } + + public bool MoveNext() + { + if (_currItem < _numItems) + { + _currItem++; + _current = true; + } + else + { + _current = false; + } + + return _current; + } + + object IEnumerator.Current => Current; + + public SerializationEntry Current + { + get + { + if (_current == false) + { + throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); + } + return new SerializationEntry(_members[_currItem], _data[_currItem], _types[_currItem]); + } + } + + public void Reset() + { + _currItem = -1; + _current = false; + } + + public string Name + { + get + { + if (_current == false) + { + throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); + } + return _members[_currItem]; + } + } + public object Value + { + get + { + if (_current == false) + { + throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); + } + return _data[_currItem]; + } + } + public Type ObjectType + { + get + { + if (_current == false) + { + throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); + } + return _types[_currItem]; + } + } + } +} diff --git a/src/mscorlib/shared/System/Runtime/Serialization/StreamingContext.cs b/src/mscorlib/shared/System/Runtime/Serialization/StreamingContext.cs new file mode 100644 index 0000000000..1026a87d1e --- /dev/null +++ b/src/mscorlib/shared/System/Runtime/Serialization/StreamingContext.cs @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Runtime.Serialization +{ + [Serializable] + public struct StreamingContext + { + private readonly object _additionalContext; + private readonly StreamingContextStates _state; + + public StreamingContext(StreamingContextStates state) : this(state, null) + { + } + + public StreamingContext(StreamingContextStates state, object additional) + { + _state = state; + _additionalContext = additional; + } + + public override bool Equals(object obj) + { + if (!(obj is StreamingContext)) + { + return false; + } + StreamingContext ctx = (StreamingContext)obj; + return ctx._additionalContext == _additionalContext && ctx._state == _state; + } + + public override int GetHashCode() => (int)_state; + + public StreamingContextStates State => _state; + + public object Context => _additionalContext; + } + + [Flags] + public enum StreamingContextStates + { + CrossProcess = 0x01, + CrossMachine = 0x02, + File = 0x04, + Persistence = 0x08, + Remoting = 0x10, + Other = 0x20, + Clone = 0x40, + CrossAppDomain = 0x80, + All = 0xFF, + } +} diff --git a/src/mscorlib/src/System/Runtime/Versioning/NonVersionableAttribute.cs b/src/mscorlib/shared/System/Runtime/Versioning/NonVersionableAttribute.cs index e4809953bc..e4809953bc 100644 --- a/src/mscorlib/src/System/Runtime/Versioning/NonVersionableAttribute.cs +++ b/src/mscorlib/shared/System/Runtime/Versioning/NonVersionableAttribute.cs diff --git a/src/mscorlib/src/System/Threading/AbandonedMutexException.cs b/src/mscorlib/shared/System/Threading/AbandonedMutexException.cs index 60808ad18f..8056a3b330 100644 --- a/src/mscorlib/src/System/Threading/AbandonedMutexException.cs +++ b/src/mscorlib/shared/System/Threading/AbandonedMutexException.cs @@ -1,28 +1,24 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. - -// // // AbandonedMutexException // Thrown when a wait completes because one or more mutexes was abandoned. // AbandonedMutexs indicate serious error in user code or machine state. //////////////////////////////////////////////////////////////////////////////// - using System; -using System.Runtime.Serialization; using System.Threading; using System.Runtime.InteropServices; +using System.Runtime.Serialization; namespace System.Threading { [Serializable] - [ComVisibleAttribute(false)] public class AbandonedMutexException : SystemException { - private int m_MutexIndex = -1; - private Mutex m_Mutex = null; + private int _mutexIndex = -1; + private Mutex _mutex = null; public AbandonedMutexException() : base(SR.Threading_AbandonedMutexException) @@ -63,32 +59,19 @@ namespace System.Threading SetupException(location, handle); } - private void SetupException(int location, WaitHandle handle) + protected AbandonedMutexException(SerializationInfo info, StreamingContext context) + : base(info, context) { - m_MutexIndex = location; - if (handle != null) - m_Mutex = handle as Mutex; } - protected AbandonedMutexException(SerializationInfo info, StreamingContext context) : base(info, context) - { - } - - public Mutex Mutex + private void SetupException(int location, WaitHandle handle) { - get - { - return m_Mutex; - } + _mutexIndex = location; + if (handle != null) + _mutex = handle as Mutex; } - public int MutexIndex - { - get - { - return m_MutexIndex; - } - } + public Mutex Mutex => _mutex; + public int MutexIndex => _mutexIndex; } } - diff --git a/src/mscorlib/src/System/Threading/ApartmentState.cs b/src/mscorlib/shared/System/Threading/ApartmentState.cs index 445d70f1c6..47c1677cb5 100644 --- a/src/mscorlib/src/System/Threading/ApartmentState.cs +++ b/src/mscorlib/shared/System/Threading/ApartmentState.cs @@ -2,19 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// -/*============================================================================= -** -** -** -** Purpose: Enum to represent the different threading models -** -** -=============================================================================*/ - namespace System.Threading { - [Serializable] public enum ApartmentState { /*========================================================================= diff --git a/src/mscorlib/src/System/Threading/AsyncLocal.cs b/src/mscorlib/shared/System/Threading/AsyncLocal.cs index b1d90b3983..59c8fb3c88 100644 --- a/src/mscorlib/src/System/Threading/AsyncLocal.cs +++ b/src/mscorlib/shared/System/Threading/AsyncLocal.cs @@ -2,11 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; using System.Collections.Generic; using System.Diagnostics; -using System.Diagnostics.Contracts; -using System.Security; namespace System.Threading { diff --git a/src/mscorlib/src/System/Threading/AutoResetEvent.cs b/src/mscorlib/shared/System/Threading/AutoResetEvent.cs index 41a012cf58..8320d7ad5a 100644 --- a/src/mscorlib/src/System/Threading/AutoResetEvent.cs +++ b/src/mscorlib/shared/System/Threading/AutoResetEvent.cs @@ -2,19 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// -/*============================================================================= -** -** -** -** Purpose: An example of a WaitHandle class -** -** -=============================================================================*/ - -using System; -using System.Runtime.InteropServices; - namespace System.Threading { public sealed class AutoResetEvent : EventWaitHandle diff --git a/src/mscorlib/src/System/Threading/EventResetMode.cs b/src/mscorlib/shared/System/Threading/EventResetMode.cs index 89bf7a769e..7aac0f51eb 100644 --- a/src/mscorlib/src/System/Threading/EventResetMode.cs +++ b/src/mscorlib/shared/System/Threading/EventResetMode.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// /*============================================================================= ** ** Enum: EventResetMode @@ -13,12 +12,8 @@ ** =============================================================================*/ - -using System.Runtime.InteropServices; - namespace System.Threading { - [ComVisibleAttribute(false)] public enum EventResetMode { AutoReset = 0, diff --git a/src/mscorlib/src/System/Threading/ExecutionContext.cs b/src/mscorlib/shared/System/Threading/ExecutionContext.cs index ec125ad8d2..67857e9b11 100644 --- a/src/mscorlib/src/System/Threading/ExecutionContext.cs +++ b/src/mscorlib/shared/System/Threading/ExecutionContext.cs @@ -1,29 +1,22 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. + /*============================================================ ** ** ** ** Purpose: Capture execution context for a thread ** -** +** ===========================================================*/ -using System; -using System.Security; -using System.Runtime.Remoting; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; -using System.Runtime.ExceptionServices; -using System.Runtime.Serialization; -using System.Runtime.InteropServices; -using System.Runtime.CompilerServices; -using System.Runtime.ConstrainedExecution; using System.Diagnostics; using System.Diagnostics.Contracts; -using System.Diagnostics.CodeAnalysis; +using System.Runtime.ExceptionServices; +using System.Runtime.Serialization; + +using Thread = Internal.Runtime.Augments.RuntimeThread; namespace System.Threading { @@ -147,7 +140,6 @@ namespace System.Threading return executionContext != null && executionContext.m_isFlowSuppressed; } - [HandleProcessCorruptedStateExceptions] public static void Run(ExecutionContext executionContext, ContextCallback callback, Object state) { if (executionContext == null) @@ -165,7 +157,7 @@ namespace System.Threading { // Note: we have a "catch" rather than a "finally" because we want // to stop the first pass of EH here. That way we can restore the previous - // context before any of our callers' EH filters run. That means we need to + // context before any of our callers' EH filters run. That means we need to // end the scope separately in the non-exceptional case below. ecsw.Undo(currentThread); throw; @@ -190,7 +182,7 @@ namespace System.Threading } } - static internal void EstablishCopyOnWriteScope(Thread currentThread, ref ExecutionContextSwitcher ecsw) + internal static void EstablishCopyOnWriteScope(Thread currentThread, ref ExecutionContextSwitcher ecsw) { Debug.Assert(currentThread == Thread.CurrentThread); @@ -198,7 +190,6 @@ namespace System.Threading ecsw.m_sc = currentThread.SynchronizationContext; } - [HandleProcessCorruptedStateExceptions] private static void OnContextChanged(ExecutionContext previous, ExecutionContext current) { Debug.Assert(previous != null); @@ -377,5 +368,3 @@ namespace System.Threading } } } - - diff --git a/src/mscorlib/shared/System/Threading/LazyThreadSafetyMode.cs b/src/mscorlib/shared/System/Threading/LazyThreadSafetyMode.cs new file mode 100644 index 0000000000..2d13f23762 --- /dev/null +++ b/src/mscorlib/shared/System/Threading/LazyThreadSafetyMode.cs @@ -0,0 +1,44 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ +// +// a set of lightweight static helpers for lazy initialization. +// +// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +namespace System.Threading +{ + /// <summary> + /// Specifies how a <see cref="T:System.Threading.Lazy{T}"/> instance should synchronize access among multiple threads. + /// </summary> + public enum LazyThreadSafetyMode + { + /// <summary> + /// This mode makes no guarantees around the thread-safety of the <see cref="T:System.Threading.Lazy{T}"/> instance. If used from multiple threads, the behavior of the <see cref="T:System.Threading.Lazy{T}"/> is undefined. + /// This mode should be used when a <see cref="T:System.Threading.Lazy{T}"/> is guaranteed to never be initialized from more than one thread simultaneously and high performance is crucial. + /// If valueFactory throws an exception when the <see cref="T:System.Threading.Lazy{T}"/> is initialized, the exception will be cached and returned on subsequent accesses to Value. Also, if valueFactory recursively + /// accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, a <see cref="T:System.InvalidOperationException"/> will be thrown. + /// </summary> + None, + + /// <summary> + /// When multiple threads attempt to simultaneously initialize a <see cref="T:System.Threading.Lazy{T}"/> instance, this mode allows each thread to execute the + /// valueFactory but only the first thread to complete initialization will be allowed to set the final value of the <see cref="T:System.Threading.Lazy{T}"/>. + /// Once initialized successfully, any future calls to Value will return the cached result. If valueFactory throws an exception on any thread, that exception will be + /// propagated out of Value. If any thread executes valueFactory without throwing an exception and, therefore, successfully sets the value, that value will be returned on + /// subsequent accesses to Value from any thread. If no thread succeeds in setting the value, IsValueCreated will remain false and subsequent accesses to Value will result in + /// the valueFactory delegate re-executing. Also, if valueFactory recursively accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, an exception will NOT be thrown. + /// </summary> + PublicationOnly, + + /// <summary> + /// This mode uses locks to ensure that only a single thread can initialize a <see cref="T:System.Threading.Lazy{T}"/> instance in a thread-safe manner. In general, + /// taken if this mode is used in conjunction with a <see cref="T:System.Threading.Lazy{T}"/> valueFactory delegate that uses locks internally, a deadlock can occur if not + /// handled carefully. If valueFactory throws an exception when the<see cref="T:System.Threading.Lazy{T}"/> is initialized, the exception will be cached and returned on + /// subsequent accesses to Value. Also, if valueFactory recursively accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, a <see cref="T:System.InvalidOperationException"/> will be thrown. + /// </summary> + ExecutionAndPublication + } +} diff --git a/src/mscorlib/src/System/Threading/LockRecursionException.cs b/src/mscorlib/shared/System/Threading/LockRecursionException.cs index 5624282a40..2f296cb14e 100644 --- a/src/mscorlib/src/System/Threading/LockRecursionException.cs +++ b/src/mscorlib/shared/System/Threading/LockRecursionException.cs @@ -2,28 +2,28 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -/*============================================================ -// -// -// -// Purpose: -// This exception represents a failed attempt to recursively -// acquire a lock, because the particular lock kind doesn't -// support it in its current state. -============================================================*/ - using System; using System.Runtime.Serialization; -using System.Runtime.CompilerServices; namespace System.Threading { [Serializable] public class LockRecursionException : System.Exception { - public LockRecursionException() { } - public LockRecursionException(string message) : base(message) { } + public LockRecursionException() + { + } + + public LockRecursionException(string message) + : base(message) + { + } + + public LockRecursionException(string message, Exception innerException) + : base(message, innerException) + { + } + protected LockRecursionException(SerializationInfo info, StreamingContext context) : base(info, context) { } - public LockRecursionException(string message, Exception innerException) : base(message, innerException) { } } } diff --git a/src/mscorlib/src/System/Threading/ManualResetEvent.cs b/src/mscorlib/shared/System/Threading/ManualResetEvent.cs index bb875c4f49..4b8d61f960 100644 --- a/src/mscorlib/src/System/Threading/ManualResetEvent.cs +++ b/src/mscorlib/shared/System/Threading/ManualResetEvent.cs @@ -2,19 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// -/*============================================================================= -** -** -** -** Purpose: An example of a WaitHandle class -** -** -=============================================================================*/ - -using System; -using System.Runtime.InteropServices; - namespace System.Threading { public sealed class ManualResetEvent : EventWaitHandle diff --git a/src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs b/src/mscorlib/shared/System/Threading/ParameterizedThreadStart.cs index 74f17a5d75..c0f29e8e80 100644 --- a/src/mscorlib/src/System/Threading/ParameterizedThreadStart.cs +++ b/src/mscorlib/shared/System/Threading/ParameterizedThreadStart.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// /*============================================================================= ** ** @@ -13,12 +12,7 @@ ** =============================================================================*/ - -using System.Threading; -using System.Runtime.InteropServices; - namespace System.Threading { - [ComVisibleAttribute(false)] public delegate void ParameterizedThreadStart(object obj); } diff --git a/src/mscorlib/src/System/Threading/SemaphoreFullException.cs b/src/mscorlib/shared/System/Threading/SemaphoreFullException.cs index bbcc226f95..19ac19d6e0 100644 --- a/src/mscorlib/src/System/Threading/SemaphoreFullException.cs +++ b/src/mscorlib/shared/System/Threading/SemaphoreFullException.cs @@ -4,12 +4,10 @@ using System; using System.Runtime.Serialization; -using System.Runtime.InteropServices; namespace System.Threading { [Serializable] - [ComVisibleAttribute(false)] public class SemaphoreFullException : SystemException { public SemaphoreFullException() : base(SR.Threading_SemaphoreFullException) @@ -29,4 +27,3 @@ namespace System.Threading } } } - diff --git a/src/mscorlib/src/System/Threading/SendOrPostCallback.cs b/src/mscorlib/shared/System/Threading/SendOrPostCallback.cs index c08b1aba6e..6692d35ab2 100644 --- a/src/mscorlib/src/System/Threading/SendOrPostCallback.cs +++ b/src/mscorlib/shared/System/Threading/SendOrPostCallback.cs @@ -1,14 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -/*============================================================ -** -** -** -** Purpose: Represents a method to be called when a message is to be dispatched to a synchronization context. -** -** -===========================================================*/ namespace System.Threading { diff --git a/src/mscorlib/src/System/Threading/SynchronizationLockException.cs b/src/mscorlib/shared/System/Threading/SynchronizationLockException.cs index 42892fe282..120577fdcf 100644 --- a/src/mscorlib/src/System/Threading/SynchronizationLockException.cs +++ b/src/mscorlib/shared/System/Threading/SynchronizationLockException.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// /*============================================================================= ** ** @@ -13,8 +12,6 @@ ** =============================================================================*/ - -using System; using System.Runtime.Serialization; namespace System.Threading @@ -45,5 +42,3 @@ namespace System.Threading } } } - - diff --git a/src/mscorlib/src/System/Threading/ThreadPriority.cs b/src/mscorlib/shared/System/Threading/ThreadPriority.cs index 64b77ea89d..3b34bd5eac 100644 --- a/src/mscorlib/src/System/Threading/ThreadPriority.cs +++ b/src/mscorlib/shared/System/Threading/ThreadPriority.cs @@ -2,21 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// -/*============================================================================= -** -** -** -** Purpose: Enums for the priorities of a Thread -** -** -=============================================================================*/ - -using System.Threading; - namespace System.Threading { - [Serializable] public enum ThreadPriority { /*========================================================================= diff --git a/src/mscorlib/src/System/Threading/ThreadStart.cs b/src/mscorlib/shared/System/Threading/ThreadStart.cs index c065fddbcf..5532539fc7 100644 --- a/src/mscorlib/src/System/Threading/ThreadStart.cs +++ b/src/mscorlib/shared/System/Threading/ThreadStart.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// /*============================================================================= ** ** @@ -13,12 +12,7 @@ ** =============================================================================*/ -using System.Threading; - namespace System.Threading { - // Define the delegate - // NOTE: If you change the signature here, there is code in COMSynchronization - // that invokes this delegate in native. public delegate void ThreadStart(); } diff --git a/src/mscorlib/src/System/Threading/ThreadStartException.cs b/src/mscorlib/shared/System/Threading/ThreadStartException.cs index 54ec4ba535..2ff77bc5fd 100644 --- a/src/mscorlib/src/System/Threading/ThreadStartException.cs +++ b/src/mscorlib/shared/System/Threading/ThreadStartException.cs @@ -2,35 +2,28 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// - -using System; using System.Runtime.Serialization; -using System.Runtime.InteropServices; namespace System.Threading { [Serializable] public sealed class ThreadStartException : SystemException { - private ThreadStartException() + internal ThreadStartException() : base(SR.Arg_ThreadStartException) { HResult = __HResults.COR_E_THREADSTART; } - private ThreadStartException(Exception reason) + internal ThreadStartException(Exception reason) : base(SR.Arg_ThreadStartException, reason) { HResult = __HResults.COR_E_THREADSTART; } - //required for serialization internal ThreadStartException(SerializationInfo info, StreamingContext context) : base(info, context) { } } } - - diff --git a/src/mscorlib/src/System/Threading/ThreadState.cs b/src/mscorlib/shared/System/Threading/ThreadState.cs index c95772e9a7..4bf3b5184d 100644 --- a/src/mscorlib/src/System/Threading/ThreadState.cs +++ b/src/mscorlib/shared/System/Threading/ThreadState.cs @@ -2,19 +2,8 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// -/*============================================================================= -** -** -** -** Purpose: Enum to represent the different thread states -** -** -=============================================================================*/ - namespace System.Threading { - [Serializable] [Flags] public enum ThreadState { diff --git a/src/mscorlib/src/System/Threading/ThreadStateException.cs b/src/mscorlib/shared/System/Threading/ThreadStateException.cs index a2b8b15bd1..33bc8baee6 100644 --- a/src/mscorlib/src/System/Threading/ThreadStateException.cs +++ b/src/mscorlib/shared/System/Threading/ThreadStateException.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// /*============================================================================= ** ** @@ -13,7 +12,6 @@ ** =============================================================================*/ -using System; using System.Runtime.Serialization; namespace System.Threading @@ -39,7 +37,8 @@ namespace System.Threading HResult = __HResults.COR_E_THREADSTATE; } - protected ThreadStateException(SerializationInfo info, StreamingContext context) : base(info, context) + protected ThreadStateException(SerializationInfo info, StreamingContext context) + : base(info, context) { } } diff --git a/src/mscorlib/shared/System/Threading/TimeoutHelper.cs b/src/mscorlib/shared/System/Threading/TimeoutHelper.cs new file mode 100644 index 0000000000..c66c9add92 --- /dev/null +++ b/src/mscorlib/shared/System/Threading/TimeoutHelper.cs @@ -0,0 +1,54 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Diagnostics; + +namespace System.Threading +{ + /// <summary> + /// A helper class to capture a start time using Environment.TickCout as a time in milliseconds, also updates a given timeout bu subtracting the current time from + /// the start time + /// </summary> + internal static class TimeoutHelper + { + /// <summary> + /// Returns the Environment.TickCount as a start time in milliseconds as a uint, TickCount tools over from postive to negative every ~ 25 days + /// then ~25 days to back to positive again, uint is sued to ignore the sign and double the range to 50 days + /// </summary> + /// <returns></returns> + public static uint GetTime() + { + return (uint)Environment.TickCount; + } + + /// <summary> + /// Helper function to measure and update the elapsed time + /// </summary> + /// <param name="startTime"> The first time (in milliseconds) observed when the wait started</param> + /// <param name="originalWaitMillisecondsTimeout">The orginal wait timeoutout in milliseconds</param> + /// <returns>The new wait time in milliseconds, -1 if the time expired</returns> + public static int UpdateTimeOut(uint startTime, int originalWaitMillisecondsTimeout) + { + // The function must be called in case the time out is not infinite + Debug.Assert(originalWaitMillisecondsTimeout != Timeout.Infinite); + + uint elapsedMilliseconds = (GetTime() - startTime); + + // Check the elapsed milliseconds is greater than max int because this property is uint + if (elapsedMilliseconds > int.MaxValue) + { + return 0; + } + + // Subtract the elapsed time from the current wait time + int currentWaitTimeout = originalWaitMillisecondsTimeout - (int)elapsedMilliseconds; ; + if (currentWaitTimeout <= 0) + { + return 0; + } + + return currentWaitTimeout; + } + } +} diff --git a/src/mscorlib/src/System/Threading/WaitHandleCannotBeOpenedException.cs b/src/mscorlib/shared/System/Threading/WaitHandleCannotBeOpenedException.cs index a6f0267aeb..e44946a669 100644 --- a/src/mscorlib/src/System/Threading/WaitHandleCannotBeOpenedException.cs +++ b/src/mscorlib/shared/System/Threading/WaitHandleCannotBeOpenedException.cs @@ -2,17 +2,11 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -// - -using System; using System.Runtime.Serialization; -using System.Runtime.InteropServices; namespace System.Threading { [Serializable] - [ComVisibleAttribute(false)] - public class WaitHandleCannotBeOpenedException : ApplicationException { public WaitHandleCannotBeOpenedException() : base(SR.Threading_WaitHandleCannotBeOpenedException) @@ -35,4 +29,3 @@ namespace System.Threading } } } - diff --git a/src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs b/src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs deleted file mode 100644 index 2b07ce9c38..0000000000 --- a/src/mscorlib/src/System/Runtime/Serialization/IDeserializationCallback.cs +++ /dev/null @@ -1,25 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -/*============================================================ -** -** Interface: IDeserializationEventListener -** -** -** Purpose: Implemented by any class that wants to indicate that -** it wishes to receive deserialization events. -** -** -===========================================================*/ - -using System; - -namespace System.Runtime.Serialization -{ - // Interface does not need to be marked with the serializable attribute - public interface IDeserializationCallback - { - void OnDeserialization(Object sender); - } -} diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs deleted file mode 100644 index be9f4aefee..0000000000 --- a/src/mscorlib/src/System/Runtime/Serialization/SerializationAttributes.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -/*============================================================ -** -** -** -** Purpose: Various Attributes for Serialization -** -** -============================================================*/ - -using System; -using System.Diagnostics.Contracts; -using System.Reflection; - -namespace System.Runtime.Serialization -{ - [AttributeUsage(AttributeTargets.Field, Inherited = false)] - public sealed class OptionalFieldAttribute : Attribute - { - private int versionAdded = 1; - public OptionalFieldAttribute() { } - - public int VersionAdded - { - get - { - return versionAdded; - } - set - { - if (value < 1) - throw new ArgumentException(SR.Serialization_OptionalFieldVersionValue); - Contract.EndContractBlock(); - versionAdded = value; - } - } - } - - [AttributeUsage(AttributeTargets.Method, Inherited = false)] - public sealed class OnSerializingAttribute : Attribute - { - } - - [AttributeUsage(AttributeTargets.Method, Inherited = false)] - public sealed class OnSerializedAttribute : Attribute - { - } - - [AttributeUsage(AttributeTargets.Method, Inherited = false)] - public sealed class OnDeserializingAttribute : Attribute - { - } - - [AttributeUsage(AttributeTargets.Method, Inherited = false)] - public sealed class OnDeserializedAttribute : Attribute - { - } -} diff --git a/src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs b/src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs deleted file mode 100644 index 791f7a8c73..0000000000 --- a/src/mscorlib/src/System/Runtime/Serialization/SerializationInfoEnumerator.cs +++ /dev/null @@ -1,176 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -/*============================================================ -** -** -** -** Purpose: A formatter-friendly mechanism for walking all of -** the data in a SerializationInfo. Follows the IEnumerator -** mechanism from Collections. -** -** -============================================================*/ - -using System; -using System.Diagnostics; -using System.Collections; -using System.Diagnostics.Contracts; - -namespace System.Runtime.Serialization -{ - // - // The tuple returned by SerializationInfoEnumerator.Current. - // - public struct SerializationEntry - { - private Type m_type; - private Object m_value; - private String m_name; - - public Object Value - { - get - { - return m_value; - } - } - - public String Name - { - get - { - return m_name; - } - } - - public Type ObjectType - { - get - { - return m_type; - } - } - - internal SerializationEntry(String entryName, Object entryValue, Type entryType) - { - m_value = entryValue; - m_name = entryName; - m_type = entryType; - } - } - - // - // A simple enumerator over the values stored in the SerializationInfo. - // This does not snapshot the values, it just keeps pointers to the - // member variables of the SerializationInfo that created it. - // - public sealed class SerializationInfoEnumerator : IEnumerator - { - private String[] m_members; - private Object[] m_data; - private Type[] m_types; - private int m_numItems; - private int m_currItem; - private bool m_current; - - internal SerializationInfoEnumerator(String[] members, Object[] info, Type[] types, int numItems) - { - Debug.Assert(members != null, "[SerializationInfoEnumerator.ctor]members!=null"); - Debug.Assert(info != null, "[SerializationInfoEnumerator.ctor]info!=null"); - Debug.Assert(types != null, "[SerializationInfoEnumerator.ctor]types!=null"); - Debug.Assert(numItems >= 0, "[SerializationInfoEnumerator.ctor]numItems>=0"); - Debug.Assert(members.Length >= numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems"); - Debug.Assert(info.Length >= numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems"); - Debug.Assert(types.Length >= numItems, "[SerializationInfoEnumerator.ctor]types.Length>=numItems"); - - m_members = members; - m_data = info; - m_types = types; - //The MoveNext semantic is much easier if we enforce that [0..m_numItems] are valid entries - //in the enumerator, hence we subtract 1. - m_numItems = numItems - 1; - m_currItem = -1; - m_current = false; - } - - public bool MoveNext() - { - if (m_currItem < m_numItems) - { - m_currItem++; - m_current = true; - } - else - { - m_current = false; - } - return m_current; - } - - Object IEnumerator.Current - { //Actually returns a SerializationEntry - get - { - if (m_current == false) - { - throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); - } - return (Object)(new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); - } - } - - public SerializationEntry Current - { //Actually returns a SerializationEntry - get - { - if (m_current == false) - { - throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); - } - return (new SerializationEntry(m_members[m_currItem], m_data[m_currItem], m_types[m_currItem])); - } - } - - public void Reset() - { - m_currItem = -1; - m_current = false; - } - - public String Name - { - get - { - if (m_current == false) - { - throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); - } - return m_members[m_currItem]; - } - } - public Object Value - { - get - { - if (m_current == false) - { - throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); - } - return m_data[m_currItem]; - } - } - public Type ObjectType - { - get - { - if (m_current == false) - { - throw new InvalidOperationException(SR.InvalidOperation_EnumOpCantHappen); - } - return m_types[m_currItem]; - } - } - } -} diff --git a/src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs b/src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs deleted file mode 100644 index 12a7631714..0000000000 --- a/src/mscorlib/src/System/Runtime/Serialization/StreamingContext.cs +++ /dev/null @@ -1,84 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -/*============================================================ -** -** ValueType: StreamingContext -** -** -** Purpose: A value type indicating the source or destination of our streaming. -** -** -===========================================================*/ - -using System.Runtime.Remoting; -using System; - -namespace System.Runtime.Serialization -{ - [Serializable] - public struct StreamingContext - { - internal Object m_additionalContext; - internal StreamingContextStates m_state; - - public StreamingContext(StreamingContextStates state) - : this(state, null) - { - } - - public StreamingContext(StreamingContextStates state, Object additional) - { - m_state = state; - m_additionalContext = additional; - } - - public Object Context - { - get { return m_additionalContext; } - } - - public override bool Equals(Object obj) - { - if (!(obj is StreamingContext)) - { - return false; - } - if (((StreamingContext)obj).m_additionalContext == m_additionalContext && - ((StreamingContext)obj).m_state == m_state) - { - return true; - } - return false; - } - - public override int GetHashCode() - { - return (int)m_state; - } - - public StreamingContextStates State - { - get { return m_state; } - } - } - - // ********************************************************** - // Keep these in sync with the version in vm\runtimehandles.h - // ********************************************************** - [Serializable] - [Flags] - public enum StreamingContextStates - { - CrossProcess = 0x01, - CrossMachine = 0x02, - File = 0x04, - Persistence = 0x08, - Remoting = 0x10, - Other = 0x20, - Clone = 0x40, - CrossAppDomain = 0x80, - All = 0xFF, - } -} diff --git a/src/mscorlib/src/System/Threading/LazyInitializer.cs b/src/mscorlib/src/System/Threading/LazyInitializer.cs index e264a8f166..d585ba6c35 100644 --- a/src/mscorlib/src/System/Threading/LazyInitializer.cs +++ b/src/mscorlib/src/System/Threading/LazyInitializer.cs @@ -17,37 +17,6 @@ using System.Diagnostics.Contracts; namespace System.Threading { /// <summary> - /// Specifies how a <see cref="T:System.Threading.Lazy{T}"/> instance should synchronize access among multiple threads. - /// </summary> - public enum LazyThreadSafetyMode - { - /// <summary> - /// This mode makes no guarantees around the thread-safety of the <see cref="T:System.Threading.Lazy{T}"/> instance. If used from multiple threads, the behavior of the <see cref="T:System.Threading.Lazy{T}"/> is undefined. - /// This mode should be used when a <see cref="T:System.Threading.Lazy{T}"/> is guaranteed to never be initialized from more than one thread simultaneously and high performance is crucial. - /// If valueFactory throws an exception when the <see cref="T:System.Threading.Lazy{T}"/> is initialized, the exception will be cached and returned on subsequent accesses to Value. Also, if valueFactory recursively - /// accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, a <see cref="T:System.InvalidOperationException"/> will be thrown. - /// </summary> - None, - - /// <summary> - /// When multiple threads attempt to simultaneously initialize a <see cref="T:System.Threading.Lazy{T}"/> instance, this mode allows each thread to execute the - /// valueFactory but only the first thread to complete initialization will be allowed to set the final value of the <see cref="T:System.Threading.Lazy{T}"/>. - /// Once initialized successfully, any future calls to Value will return the cached result. If valueFactory throws an exception on any thread, that exception will be - /// propagated out of Value. If any thread executes valueFactory without throwing an exception and, therefore, successfully sets the value, that value will be returned on - /// subsequent accesses to Value from any thread. If no thread succeeds in setting the value, IsValueCreated will remain false and subsequent accesses to Value will result in - /// the valueFactory delegate re-executing. Also, if valueFactory recursively accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, an exception will NOT be thrown. - /// </summary> - PublicationOnly, - - /// <summary> - /// This mode uses locks to ensure that only a single thread can initialize a <see cref="T:System.Threading.Lazy{T}"/> instance in a thread-safe manner. In general, - /// taken if this mode is used in conjunction with a <see cref="T:System.Threading.Lazy{T}"/> valueFactory delegate that uses locks internally, a deadlock can occur if not - /// handled carefully. If valueFactory throws an exception when the<see cref="T:System.Threading.Lazy{T}"/> is initialized, the exception will be cached and returned on - /// subsequent accesses to Value. Also, if valueFactory recursively accesses Value on this <see cref="T:System.Threading.Lazy{T}"/> instance, a <see cref="T:System.InvalidOperationException"/> will be thrown. - /// </summary> - ExecutionAndPublication - } - /// <summary> /// Provides lazy initialization routines. /// </summary> /// <remarks> diff --git a/src/mscorlib/src/System/Threading/SpinWait.cs b/src/mscorlib/src/System/Threading/SpinWait.cs index ae490e8f24..30d7aa679c 100644 --- a/src/mscorlib/src/System/Threading/SpinWait.cs +++ b/src/mscorlib/src/System/Threading/SpinWait.cs @@ -51,7 +51,7 @@ namespace System.Threading /// <remarks> /// <para> /// <see cref="SpinWait"/> encapsulates common spinning logic. On single-processor machines, yields are - /// always used instead of busy waits, and on computers with Intel� processors employing Hyper-Threading� + /// always used instead of busy waits, and on computers with Intel processors employing Hyper-Threading /// technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of /// spinning and true yielding. /// </para> @@ -312,50 +312,4 @@ namespace System.Threading get { return ProcessorCount == 1; } } } - - /// <summary> - /// A helper class to capture a start time using Environment.TickCout as a time in milliseconds, also updates a given timeout bu subtracting the current time from - /// the start time - /// </summary> - internal static class TimeoutHelper - { - /// <summary> - /// Returns the Environment.TickCount as a start time in milliseconds as a uint, TickCount tools over from postive to negative every ~ 25 days - /// then ~25 days to back to positive again, uint is sued to ignore the sign and double the range to 50 days - /// </summary> - /// <returns></returns> - public static uint GetTime() - { - return (uint)Environment.TickCount; - } - - /// <summary> - /// Helper function to measure and update the elapsed time - /// </summary> - /// <param name="startTime"> The first time (in milliseconds) observed when the wait started</param> - /// <param name="originalWaitMillisecondsTimeout">The orginal wait timeoutout in milliseconds</param> - /// <returns>The new wait time in milliseconds, -1 if the time expired</returns> - public static int UpdateTimeOut(uint startTime, int originalWaitMillisecondsTimeout) - { - // The function must be called in case the time out is not infinite - Debug.Assert(originalWaitMillisecondsTimeout != Timeout.Infinite); - - uint elapsedMilliseconds = (GetTime() - startTime); - - // Check the elapsed milliseconds is greater than max int because this property is uint - if (elapsedMilliseconds > int.MaxValue) - { - return 0; - } - - // Subtract the elapsed time from the current wait time - int currentWaitTimeout = originalWaitMillisecondsTimeout - (int)elapsedMilliseconds; ; - if (currentWaitTimeout <= 0) - { - return 0; - } - - return currentWaitTimeout; - } - } } |