Moving non-changing methods into .cs partial
This commit is contained in:
parent
ccfeef6353
commit
29b0b124ee
|
|
@ -6,10 +6,8 @@ using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Server.Kestrel.Http;
|
|
||||||
using Microsoft.Extensions.Primitives;
|
using Microsoft.Extensions.Primitives;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Server.Kestrel.Http
|
namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
|
|
@ -34,6 +32,42 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
_featureRevision++;
|
_featureRevision++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private object ExtraFeatureGet(Type key)
|
||||||
|
{
|
||||||
|
if (MaybeExtra == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < MaybeExtra.Count; i++)
|
||||||
|
{
|
||||||
|
var kv = MaybeExtra[i];
|
||||||
|
if (kv.Key == key)
|
||||||
|
{
|
||||||
|
return kv.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExtraFeatureSet(Type key, object value)
|
||||||
|
{
|
||||||
|
if (MaybeExtra == null)
|
||||||
|
{
|
||||||
|
MaybeExtra = new List<KeyValuePair<Type, object>>(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < MaybeExtra.Count; i++)
|
||||||
|
{
|
||||||
|
if (MaybeExtra[i].Key == key)
|
||||||
|
{
|
||||||
|
MaybeExtra[i] = new KeyValuePair<Type, object>(key, value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MaybeExtra.Add(new KeyValuePair<Type, object>(key, value));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
string IHttpRequestFeature.Protocol
|
string IHttpRequestFeature.Protocol
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
|
||||||
|
|
@ -172,52 +172,8 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
{
|
{
|
||||||
return _currentIHttpSendFileFeature;
|
return _currentIHttpSendFileFeature;
|
||||||
}
|
}
|
||||||
return SlowFeatureGet(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
private object SlowFeatureGet(Type key)
|
return ExtraFeatureGet(key);
|
||||||
{
|
|
||||||
if (MaybeExtra == null)
|
|
||||||
{
|
|
||||||
if ((_featureOverridenFlags & flagIHttpConnectionFeature) == 0L)
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return SlowFeatureGet(key);
|
|
||||||
}
|
|
||||||
if (key == ITlsConnectionFeatureType)
|
|
||||||
{
|
|
||||||
if ((_featureOverridenFlags & flagITlsConnectionFeature) == 0L)
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return SlowFeatureGet(key);
|
|
||||||
}
|
|
||||||
if (key == IHttpUpgradeFeatureType)
|
|
||||||
{
|
|
||||||
if ((_featureOverridenFlags & flagIHttpUpgradeFeature) == 0L)
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return SlowFeatureGet(key);
|
|
||||||
}
|
|
||||||
if (key == IHttpWebSocketFeatureType)
|
|
||||||
{
|
|
||||||
if ((_featureOverridenFlags & flagIHttpWebSocketFeature) == 0L)
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return SlowFeatureGet(key);
|
|
||||||
}
|
|
||||||
if (key == ISessionFeatureType)
|
|
||||||
{
|
|
||||||
if ((_featureOverridenFlags & flagISessionFeature) == 0L)
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return SlowFeatureGet(key);
|
|
||||||
}
|
|
||||||
return SlowFeatureGet(key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -333,7 +289,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
_currentIHttpSendFileFeature = feature;
|
_currentIHttpSendFileFeature = feature;
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
SetExtra(key, feature);
|
ExtraFeatureSet(key, feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<KeyValuePair<Type, object>> FastEnumerable()
|
private IEnumerable<KeyValuePair<Type, object>> FastEnumerable()
|
||||||
|
|
|
||||||
|
|
@ -79,35 +79,10 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
{{
|
{{
|
||||||
return _current{feature.Name};
|
return _current{feature.Name};
|
||||||
}}")}
|
}}")}
|
||||||
return SlowFeatureGet(key);
|
|
||||||
|
return ExtraFeatureGet(key);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
private object SlowFeatureGet(Type key)
|
|
||||||
{{
|
|
||||||
object feature = null;
|
|
||||||
if (MaybeExtra?.TryGetValue(key, out feature) ?? false)
|
|
||||||
{{
|
|
||||||
return feature;
|
|
||||||
}}
|
|
||||||
return null;
|
|
||||||
}}
|
|
||||||
|
|
||||||
private void FastFeatureSetInner(long flag, Type key, object feature)
|
|
||||||
{{
|
|
||||||
Extra[key] = feature;
|
|
||||||
|
|
||||||
// Altering only an individual bit of the long
|
|
||||||
// so need to make sure other concurrent bit changes are not overridden
|
|
||||||
// in an atomic yet lock-free manner
|
|
||||||
|
|
||||||
long currentFeatureFlags;
|
|
||||||
long updatedFeatureFlags;
|
|
||||||
do
|
|
||||||
{{
|
|
||||||
currentFeatureFlags = _featureOverridenFlags;
|
|
||||||
updatedFeatureFlags = currentFeatureFlags | flag;
|
|
||||||
}} while (System.Threading.Interlocked.CompareExchange(ref _featureOverridenFlags, updatedFeatureFlags, currentFeatureFlags) != currentFeatureFlags);
|
|
||||||
|
|
||||||
private void FastFeatureSet(Type key, object feature)
|
private void FastFeatureSet(Type key, object feature)
|
||||||
{{
|
{{
|
||||||
_featureRevision++;
|
_featureRevision++;
|
||||||
|
|
@ -117,7 +92,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
|
||||||
_current{feature.Name} = feature;
|
_current{feature.Name} = feature;
|
||||||
return;
|
return;
|
||||||
}}")};
|
}}")};
|
||||||
SetExtra(key, feature);
|
ExtraFeatureSet(key, feature);
|
||||||
}}
|
}}
|
||||||
|
|
||||||
private IEnumerable<KeyValuePair<Type, object>> FastEnumerable()
|
private IEnumerable<KeyValuePair<Type, object>> FastEnumerable()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue