Work around WriteBarrier assign for nulling struct (#7659)

This commit is contained in:
Ben Adams 2019-02-17 04:09:39 +00:00 committed by David Fowler
parent 0fd753bfc2
commit 4646ed5618
9 changed files with 50 additions and 15 deletions

View File

@ -15,6 +15,20 @@ namespace Microsoft.AspNetCore.Http.Features
Revision = collection.Revision;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Initalize(IFeatureCollection collection)
{
Revision = collection.Revision;
Collection = collection;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Initalize(IFeatureCollection collection, int revision)
{
Revision = revision;
Collection = collection;
}
public IFeatureCollection Collection { get; private set; }
public int Revision { get; private set; }

View File

@ -40,18 +40,19 @@ namespace Microsoft.AspNetCore.Http
public DefaultHttpContext(IFeatureCollection features)
{
_features = new FeatureReferences<FeatureInterfaces>(features);
_features.Initalize(features);
_request = new DefaultHttpRequest(this);
_response = new DefaultHttpResponse(this);
}
public void Initialize(IFeatureCollection features)
{
_features = new FeatureReferences<FeatureInterfaces>(features);
_request.Initialize();
_response.Initialize();
_connection?.Initialize(features);
_websockets?.Initialize(features);
var revision = features.Revision;
_features.Initalize(features, revision);
_request.Initialize(revision);
_response.Initialize(revision);
_connection?.Initialize(features, revision);
_websockets?.Initialize(features, revision);
}
public void Uninitialize()

View File

@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.Http.Features
throw new ArgumentNullException(nameof(features));
}
_features = new FeatureReferences<IHttpRequestFeature>(features);
_features.Initalize(features);
}
private IHttpRequestFeature HttpRequestFeature =>

View File

@ -35,7 +35,7 @@ namespace Microsoft.AspNetCore.Http.Features
throw new ArgumentNullException(nameof(features));
}
_features = new FeatureReferences<IHttpRequestFeature>(features);
_features.Initalize(features);
}
private IHttpRequestFeature HttpRequestFeature =>

View File

@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Http.Features
throw new ArgumentNullException(nameof(features));
}
_features = new FeatureReferences<IHttpResponseFeature>(features);
_features.Initalize(features);
}
private IHttpResponseFeature HttpResponseFeature => _features.Fetch(ref _features.Cache, _nullResponseFeature);

View File

@ -25,7 +25,12 @@ namespace Microsoft.AspNetCore.Http.Internal
public void Initialize( IFeatureCollection features)
{
_features = new FeatureReferences<FeatureInterfaces>(features);
_features.Initalize(features);
}
public void Initialize(IFeatureCollection features, int revision)
{
_features.Initalize(features, revision);
}
public void Uninitialize()

View File

@ -28,12 +28,17 @@ namespace Microsoft.AspNetCore.Http.Internal
public DefaultHttpRequest(DefaultHttpContext context)
{
_context = context;
_features = new FeatureReferences<FeatureInterfaces>(_context.Features);
_features.Initalize(context.Features);
}
public void Initialize()
{
_features = new FeatureReferences<FeatureInterfaces>(_context.Features);
_features.Initalize(_context.Features);
}
public void Initialize(int revision)
{
_features.Initalize(_context.Features, revision);
}
public void Uninitialize()

View File

@ -25,12 +25,17 @@ namespace Microsoft.AspNetCore.Http.Internal
public DefaultHttpResponse(DefaultHttpContext context)
{
_context = context;
_features = new FeatureReferences<FeatureInterfaces>(_context.Features);
_features.Initalize(context.Features);
}
public void Initialize()
{
_features = new FeatureReferences<FeatureInterfaces>(_context.Features);
_features.Initalize(_context.Features);
}
public void Initialize(int revision)
{
_features.Initalize(_context.Features, revision);
}
public void Uninitialize()

View File

@ -25,7 +25,12 @@ namespace Microsoft.AspNetCore.Http.Internal
public void Initialize(IFeatureCollection features)
{
_features = new FeatureReferences<FeatureInterfaces>(features);
_features.Initalize(features);
}
public void Initialize(IFeatureCollection features, int revision)
{
_features.Initalize(features, revision);
}
public void Uninitialize()