summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/System.Private.CoreLib/System.Private.CoreLib.csproj4
-rw-r--r--src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems2
-rw-r--r--src/System.Private.CoreLib/shared/System/WeakReference.T.cs (renamed from src/System.Private.CoreLib/src/System/WeakReferenceOfT.cs)45
-rw-r--r--src/System.Private.CoreLib/shared/System/WeakReference.cs51
-rw-r--r--src/System.Private.CoreLib/src/System/WeakReference.CoreCLR.cs (renamed from src/System.Private.CoreLib/src/System/WeakReference.cs)52
-rw-r--r--src/System.Private.CoreLib/src/System/WeakReference.T.CoreCLR.cs45
6 files changed, 102 insertions, 97 deletions
diff --git a/src/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/System.Private.CoreLib/System.Private.CoreLib.csproj
index 455973c786..246cd4202f 100644
--- a/src/System.Private.CoreLib/System.Private.CoreLib.csproj
+++ b/src/System.Private.CoreLib/System.Private.CoreLib.csproj
@@ -284,8 +284,8 @@
<Compile Include="$(BclSourcesRoot)\System\TypeLoadException.CoreCLR.cs" />
<Compile Include="$(BclSourcesRoot)\System\TypeNameParser.cs" />
<Compile Include="$(BclSourcesRoot)\System\ValueType.cs" />
- <Compile Include="$(BclSourcesRoot)\System\WeakReference.cs" />
- <Compile Include="$(BclSourcesRoot)\System\WeakReferenceOfT.cs" />
+ <Compile Include="$(BclSourcesRoot)\System\WeakReference.CoreCLR.cs" />
+ <Compile Include="$(BclSourcesRoot)\System\WeakReference.T.CoreCLR.cs" />
<Compile Include="shared\Interop\Windows\Kernel32\Interop.HandleTypes.cs" />
<Compile Include="shared\Interop\Windows\Kernel32\Interop.GetStdHandle.cs" />
<Compile Include="shared\Interop\Windows\Kernel32\Interop.LocalAlloc.cs" />
diff --git a/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems b/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems
index ba8509d418..ece302e2a4 100644
--- a/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems
+++ b/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems
@@ -923,6 +923,8 @@
<Compile Include="$(MSBuildThisFileDirectory)System\ValueTuple.cs" />
<Compile Include="$(MSBuildThisFileDirectory)System\Version.cs" />
<Compile Include="$(MSBuildThisFileDirectory)System\Void.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)System\WeakReference.cs" />
+ <Compile Include="$(MSBuildThisFileDirectory)System\WeakReference.T.cs" />
</ItemGroup>
<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Advapi32\Interop.ActivityControl.cs" />
diff --git a/src/System.Private.CoreLib/src/System/WeakReferenceOfT.cs b/src/System.Private.CoreLib/shared/System/WeakReference.T.cs
index 1413a3584f..6a395ee82e 100644
--- a/src/System.Private.CoreLib/src/System/WeakReferenceOfT.cs
+++ b/src/System.Private.CoreLib/shared/System/WeakReference.T.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: A wrapper for establishing a WeakReference to a generic type.
-**
-===========================================================*/
-
-using System;
using System.Runtime.Serialization;
-using System.Security;
-using System.Runtime;
using System.Runtime.CompilerServices;
-using System.Runtime.Versioning;
using System.Diagnostics.CodeAnalysis;
namespace System
@@ -22,14 +11,11 @@ namespace System
[Serializable]
[System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
// This class is sealed to mitigate security issues caused by Object::MemberwiseClone.
- public sealed class WeakReference<T> : ISerializable
+ public sealed partial class WeakReference<T> : ISerializable
where T : class?
{
// If you fix bugs here, please fix them in WeakReference at the same time.
- // This field is not a regular GC handle. It can have a special values that are used to prevent a race condition between setting the target and finalization.
- internal IntPtr m_handle;
-
// Creates a new WeakReference that keeps track of target.
// Assumes a Short Weak Reference (ie TrackResurrection is false.)
//
@@ -74,29 +60,6 @@ namespace System
return o != null;
}
- public void SetTarget(T target)
- {
- this.Target = target;
- }
-
- // This is property for better debugging experience (VS debugger shows values of properties when you hover over the variables)
- private extern T Target
- {
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- get;
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- set;
- }
-
- // Free all system resources associated with this reference.
- //
- // Note: The WeakReference<T> finalizer is not usually run, but
- // treated specially in gc.cpp's ScanForFinalization
- // This is needed for subclasses deriving from WeakReference<T>, however.
- // Additionally, there may be some cases during shutdown when we run this finalizer.
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- extern ~WeakReference();
-
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
@@ -107,11 +70,5 @@ namespace System
info.AddValue("TrackedObject", this.Target, typeof(T)); // Do not rename (binary serialization)
info.AddValue("TrackResurrection", IsTrackResurrection()); // Do not rename (binary serialization)
}
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern void Create(T target, bool trackResurrection);
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern bool IsTrackResurrection();
}
}
diff --git a/src/System.Private.CoreLib/shared/System/WeakReference.cs b/src/System.Private.CoreLib/shared/System/WeakReference.cs
new file mode 100644
index 0000000000..bb436e69ee
--- /dev/null
+++ b/src/System.Private.CoreLib/shared/System/WeakReference.cs
@@ -0,0 +1,51 @@
+// 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.Runtime.Serialization;
+
+namespace System
+{
+ [Serializable]
+ [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
+ public partial class WeakReference : ISerializable
+ {
+ // If you fix bugs here, please fix them in WeakReference<T> at the same time.
+
+ // Creates a new WeakReference that keeps track of target.
+ // Assumes a Short Weak Reference (ie TrackResurrection is false.)
+ //
+ public WeakReference(object? target)
+ : this(target, false)
+ {
+ }
+
+ public WeakReference(object? target, bool trackResurrection)
+ {
+ Create(target, trackResurrection);
+ }
+
+ protected WeakReference(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException(nameof(info));
+ }
+
+ object? target = info.GetValue("TrackedObject", typeof(object)); // Do not rename (binary serialization)
+ bool trackResurrection = info.GetBoolean("TrackResurrection"); // Do not rename (binary serialization)
+
+ Create(target, trackResurrection);
+ }
+
+ public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ if (info == null)
+ {
+ throw new ArgumentNullException(nameof(info));
+ }
+ info.AddValue("TrackedObject", Target, typeof(object)); // Do not rename (binary serialization)
+ info.AddValue("TrackResurrection", IsTrackResurrection()); // Do not rename (binary serialization)
+ }
+ }
+}
diff --git a/src/System.Private.CoreLib/src/System/WeakReference.cs b/src/System.Private.CoreLib/src/System/WeakReference.CoreCLR.cs
index 244af93bad..509c24a38c 100644
--- a/src/System.Private.CoreLib/src/System/WeakReference.cs
+++ b/src/System.Private.CoreLib/src/System/WeakReference.CoreCLR.cs
@@ -2,25 +2,13 @@
// 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 wrapper for establishing a WeakReference to an Object.
-**
-===========================================================*/
-
-using System;
using System.Runtime.Serialization;
-using System.Security;
using System.Runtime.CompilerServices;
-using System.Runtime.Versioning;
using System.Diagnostics;
namespace System
{
- [Serializable]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class WeakReference : ISerializable
+ public partial class WeakReference : ISerializable
{
// If you fix bugs here, please fix them in WeakReference<T> at the same time.
@@ -34,34 +22,6 @@ namespace System
throw new NotImplementedException();
}
- // Creates a new WeakReference that keeps track of target.
- // Assumes a Short Weak Reference (ie TrackResurrection is false.)
- //
- public WeakReference(object? target)
- : this(target, false)
- {
- }
-
- //Creates a new WeakReference that keeps track of target.
- //
- public WeakReference(object? target, bool trackResurrection)
- {
- Create(target, trackResurrection);
- }
-
- protected WeakReference(SerializationInfo info, StreamingContext context)
- {
- if (info == null)
- {
- throw new ArgumentNullException(nameof(info));
- }
-
- object? target = info.GetValue("TrackedObject", typeof(object)); // Do not rename (binary serialization)
- bool trackResurrection = info.GetBoolean("TrackResurrection"); // Do not rename (binary serialization)
-
- Create(target, trackResurrection);
- }
-
//Determines whether or not this instance of WeakReference still refers to an object
//that has not been collected.
//
@@ -100,16 +60,6 @@ namespace System
[MethodImplAttribute(MethodImplOptions.InternalCall)]
extern ~WeakReference();
- public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- if (info == null)
- {
- throw new ArgumentNullException(nameof(info));
- }
- info.AddValue("TrackedObject", Target, typeof(object)); // Do not rename (binary serialization)
- info.AddValue("TrackResurrection", IsTrackResurrection()); // Do not rename (binary serialization)
- }
-
[MethodImplAttribute(MethodImplOptions.InternalCall)]
private extern void Create(object? target, bool trackResurrection);
diff --git a/src/System.Private.CoreLib/src/System/WeakReference.T.CoreCLR.cs b/src/System.Private.CoreLib/src/System/WeakReference.T.CoreCLR.cs
new file mode 100644
index 0000000000..028817f708
--- /dev/null
+++ b/src/System.Private.CoreLib/src/System/WeakReference.T.CoreCLR.cs
@@ -0,0 +1,45 @@
+// 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.Runtime.Serialization;
+using System.Runtime.CompilerServices;
+
+namespace System
+{
+ public sealed partial class WeakReference<T> : ISerializable
+ where T : class?
+ {
+ // This field is not a regular GC handle. It can have a special values that are used to prevent a race condition between setting the target and finalization.
+ internal IntPtr m_handle;
+
+ public void SetTarget(T target)
+ {
+ this.Target = target;
+ }
+
+ // This is property for better debugging experience (VS debugger shows values of properties when you hover over the variables)
+ private extern T Target
+ {
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ get;
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ set;
+ }
+
+ // Free all system resources associated with this reference.
+ //
+ // Note: The WeakReference<T> finalizer is not usually run, but
+ // treated specially in gc.cpp's ScanForFinalization
+ // This is needed for subclasses deriving from WeakReference<T>, however.
+ // Additionally, there may be some cases during shutdown when we run this finalizer.
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ extern ~WeakReference();
+
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern void Create(T target, bool trackResurrection);
+
+ [MethodImplAttribute(MethodImplOptions.InternalCall)]
+ private extern bool IsTrackResurrection();
+ }
+}