Fixing rebase errors

This commit is contained in:
Louis DeJardin 2015-10-09 13:26:34 -07:00
parent daf272163d
commit 78177e7082
3 changed files with 64 additions and 150 deletions

View File

@ -22,8 +22,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
private string _pathBase; private string _pathBase;
private int _featureRevision; private int _featureRevision;
private Dictionary<Type, object> Extra => MaybeExtra ?? Interlocked.CompareExchange(ref MaybeExtra, new Dictionary<Type, object>(), null); private List<KeyValuePair<Type, object>> MaybeExtra;
private Dictionary<Type, object> MaybeExtra;
public void ResetFeatureCollection() public void ResetFeatureCollection()
{ {

View File

@ -9,20 +9,12 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
private static readonly Type IHttpRequestFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestFeature); private static readonly Type IHttpRequestFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestFeature);
private static readonly Type IHttpResponseFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpResponseFeature); private static readonly Type IHttpResponseFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpResponseFeature);
private static readonly Type IHttpRequestIdentifierFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestIdentifierFeature); private static readonly Type IHttpRequestIdentifierFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestIdentifierFeature);
private static readonly Type IHttpSendFileFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpSendFileFeature);
private static readonly Type IServiceProvidersFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature); private static readonly Type IServiceProvidersFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature);
private static readonly Type IHttpAuthenticationFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Authentication.IHttpAuthenticationFeature);
private static readonly Type IHttpRequestLifetimeFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature); private static readonly Type IHttpRequestLifetimeFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature);
private static readonly Type IHttpConnectionFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpConnectionFeature);
private static readonly Type IHttpAuthenticationFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Authentication.IHttpAuthenticationFeature);
private static readonly Type IQueryFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IQueryFeature); private static readonly Type IQueryFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IQueryFeature);
private static readonly Type IFormFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IFormFeature); private static readonly Type IFormFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IFormFeature);
private static readonly Type IResponseCookiesFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IResponseCookiesFeature);
private static readonly Type IItemsFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IItemsFeature);
private static readonly Type IHttpConnectionFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpConnectionFeature);
private static readonly Type ITlsConnectionFeatureType = typeof(global::Microsoft.AspNet.Http.Features.ITlsConnectionFeature);
private static readonly Type IHttpUpgradeFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature);
private static readonly Type IHttpWebSocketFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpWebSocketFeature);
private static readonly Type ISessionFeatureType = typeof(global::Microsoft.AspNet.Http.Features.ISessionFeature);
private static readonly Type IHttpSendFileFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpSendFileFeature);
private static readonly Type IHttpUpgradeFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature); private static readonly Type IHttpUpgradeFeatureType = typeof(global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature);
private static readonly Type IResponseCookiesFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IResponseCookiesFeature); private static readonly Type IResponseCookiesFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IResponseCookiesFeature);
private static readonly Type IItemsFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IItemsFeature); private static readonly Type IItemsFeatureType = typeof(global::Microsoft.AspNet.Http.Features.Internal.IItemsFeature);
@ -73,7 +65,6 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
{ {
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestFeature))
{ {
return _currentIHttpRequestFeature; return _currentIHttpRequestFeature;
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpResponseFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpResponseFeature))
@ -82,67 +73,31 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestIdentifierFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestIdentifierFeature))
{ {
if ((_featureOverridenFlags & flagIHttpSendFileFeature) == 0L) return _currentIHttpRequestIdentifierFeature;
{
return this;
}
return SlowFeatureGet(key);
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature))
{ {
if ((_featureOverridenFlags & flagIServiceProvidersFeature) == 0L) return _currentIServiceProvidersFeature;
{
return this;
}
return SlowFeatureGet(key);
}
if (key == IHttpAuthenticationFeatureType)
{
if ((_featureOverridenFlags & flagIHttpAuthenticationFeature) == 0L)
{
return this;
}
return SlowFeatureGet(key);
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature))
{ {
if ((_featureOverridenFlags & flagIHttpRequestLifetimeFeature) == 0L) return _currentIHttpRequestLifetimeFeature;
{
return this;
}
return SlowFeatureGet(key);
} }
if (key == IQueryFeatureType) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpConnectionFeature))
{ {
if ((_featureOverridenFlags & flagIQueryFeature) == 0L) return _currentIHttpConnectionFeature;
{
return this;
}
return SlowFeatureGet(key);
} }
if (key == IFormFeatureType) if (key == typeof(global::Microsoft.AspNet.Http.Features.Authentication.IHttpAuthenticationFeature))
{ {
if ((_featureOverridenFlags & flagIFormFeature) == 0L) return _currentIHttpAuthenticationFeature;
{
return this;
}
return SlowFeatureGet(key);
} }
if (key == IResponseCookiesFeatureType) if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IQueryFeature))
{ {
if ((_featureOverridenFlags & flagIResponseCookiesFeature) == 0L) return _currentIQueryFeature;
{
return this;
}
return SlowFeatureGet(key);
} }
if (key == IItemsFeatureType) if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IFormFeature))
{ {
if ((_featureOverridenFlags & flagIItemsFeature) == 0L) return _currentIFormFeature;
{
return this;
}
return SlowFeatureGet(key);
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature))
{ {
@ -172,14 +127,14 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
{ {
return _currentIHttpSendFileFeature; return _currentIHttpSendFileFeature;
} }
return ExtraFeatureGet(key); return ExtraFeatureGet(key);
} }
private void FastFeatureSet(Type key, object feature) private void FastFeatureSet(Type key, object feature)
{ {
if (key == IHttpRequestFeatureType) _featureRevision++;
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestFeature))
{ {
_currentIHttpRequestFeature = feature; _currentIHttpRequestFeature = feature;
return; return;
@ -191,67 +146,37 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestIdentifierFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestIdentifierFeature))
{ {
FastFeatureSetInner(flagIHttpSendFileFeature, key, feature); _currentIHttpRequestIdentifierFeature = feature;
return; return;
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature))
{ {
FastFeatureSetInner(flagIServiceProvidersFeature, key, feature); _currentIServiceProvidersFeature = feature;
return;
}
if (key == IHttpAuthenticationFeatureType)
{
FastFeatureSetInner(flagIHttpAuthenticationFeature, key, feature);
return; return;
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature))
{ {
FastFeatureSetInner(flagIHttpRequestLifetimeFeature, key, feature); _currentIHttpRequestLifetimeFeature = feature;
return;
}
if (key == IQueryFeatureType)
{
FastFeatureSetInner(flagIQueryFeature, key, feature);
return;
}
if (key == IFormFeatureType)
{
FastFeatureSetInner(flagIFormFeature, key, feature);
return;
}
if (key == IResponseCookiesFeatureType)
{
FastFeatureSetInner(flagIResponseCookiesFeature, key, feature);
return;
}
if (key == IItemsFeatureType)
{
FastFeatureSetInner(flagIItemsFeature, key, feature);
return; return;
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpConnectionFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpConnectionFeature))
{ {
FastFeatureSetInner(flagIHttpConnectionFeature, key, feature); _currentIHttpConnectionFeature = feature;
return; return;
} }
if (key == ITlsConnectionFeatureType) if (key == typeof(global::Microsoft.AspNet.Http.Features.Authentication.IHttpAuthenticationFeature))
{ {
FastFeatureSetInner(flagITlsConnectionFeature, key, feature); _currentIHttpAuthenticationFeature = feature;
return; return;
} }
if (key == IHttpUpgradeFeatureType) if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IQueryFeature))
{ {
FastFeatureSetInner(flagIHttpUpgradeFeature, key, feature); _currentIQueryFeature = feature;
return; return;
} }
if (key == IHttpWebSocketFeatureType) if (key == typeof(global::Microsoft.AspNet.Http.Features.Internal.IFormFeature))
{ {
FastFeatureSetInner(flagIHttpWebSocketFeature, key, feature); _currentIFormFeature = feature;
return;
}
if (key == ISessionFeatureType)
{
FastFeatureSetInner(flagISessionFeature, key, feature);
return; return;
} }
if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature)) if (key == typeof(global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature))
@ -304,55 +229,31 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
} }
if (_currentIHttpRequestIdentifierFeature != null) if (_currentIHttpRequestIdentifierFeature != null)
{ {
yield return new KeyValuePair<Type, object>(IHttpSendFileFeatureType, this as global::Microsoft.AspNet.Http.Features.IHttpSendFileFeature); yield return new KeyValuePair<Type, object>(IHttpRequestIdentifierFeatureType, _currentIHttpRequestIdentifierFeature as global::Microsoft.AspNet.Http.Features.IHttpRequestIdentifierFeature);
} }
if ((_featureOverridenFlags & flagIServiceProvidersFeature) == 0L) if (_currentIServiceProvidersFeature != null)
{ {
yield return new KeyValuePair<Type, object>(IServiceProvidersFeatureType, this as global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature); yield return new KeyValuePair<Type, object>(IServiceProvidersFeatureType, _currentIServiceProvidersFeature as global::Microsoft.AspNet.Http.Features.Internal.IServiceProvidersFeature);
} }
if ((_featureOverridenFlags & flagIHttpAuthenticationFeature) == 0L) if (_currentIHttpRequestLifetimeFeature != null)
{ {
yield return new KeyValuePair<Type, object>(IHttpAuthenticationFeatureType, this as global::Microsoft.AspNet.Http.Features.Authentication.IHttpAuthenticationFeature); yield return new KeyValuePair<Type, object>(IHttpRequestLifetimeFeatureType, _currentIHttpRequestLifetimeFeature as global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature);
} }
if ((_featureOverridenFlags & flagIHttpRequestLifetimeFeature) == 0L) if (_currentIHttpConnectionFeature != null)
{ {
yield return new KeyValuePair<Type, object>(IHttpRequestLifetimeFeatureType, this as global::Microsoft.AspNet.Http.Features.IHttpRequestLifetimeFeature); yield return new KeyValuePair<Type, object>(IHttpConnectionFeatureType, _currentIHttpConnectionFeature as global::Microsoft.AspNet.Http.Features.IHttpConnectionFeature);
} }
if ((_featureOverridenFlags & flagIQueryFeature) == 0L) if (_currentIHttpAuthenticationFeature != null)
{ {
yield return new KeyValuePair<Type, object>(IQueryFeatureType, this as global::Microsoft.AspNet.Http.Features.Internal.IQueryFeature); yield return new KeyValuePair<Type, object>(IHttpAuthenticationFeatureType, _currentIHttpAuthenticationFeature as global::Microsoft.AspNet.Http.Features.Authentication.IHttpAuthenticationFeature);
} }
if ((_featureOverridenFlags & flagIFormFeature) == 0L) if (_currentIQueryFeature != null)
{ {
yield return new KeyValuePair<Type, object>(IFormFeatureType, this as global::Microsoft.AspNet.Http.Features.Internal.IFormFeature); yield return new KeyValuePair<Type, object>(IQueryFeatureType, _currentIQueryFeature as global::Microsoft.AspNet.Http.Features.Internal.IQueryFeature);
} }
if ((_featureOverridenFlags & flagIResponseCookiesFeature) == 0L) if (_currentIFormFeature != null)
{ {
yield return new KeyValuePair<Type, object>(IResponseCookiesFeatureType, this as global::Microsoft.AspNet.Http.Features.Internal.IResponseCookiesFeature); yield return new KeyValuePair<Type, object>(IFormFeatureType, _currentIFormFeature as global::Microsoft.AspNet.Http.Features.Internal.IFormFeature);
}
if ((_featureOverridenFlags & flagIItemsFeature) == 0L)
{
yield return new KeyValuePair<Type, object>(IItemsFeatureType, this as global::Microsoft.AspNet.Http.Features.Internal.IItemsFeature);
}
if ((_featureOverridenFlags & flagIHttpConnectionFeature) == 0L)
{
yield return new KeyValuePair<Type, object>(IHttpConnectionFeatureType, this as global::Microsoft.AspNet.Http.Features.IHttpConnectionFeature);
}
if ((_featureOverridenFlags & flagITlsConnectionFeature) == 0L)
{
yield return new KeyValuePair<Type, object>(ITlsConnectionFeatureType, this as global::Microsoft.AspNet.Http.Features.ITlsConnectionFeature);
}
if ((_featureOverridenFlags & flagIHttpUpgradeFeature) == 0L)
{
yield return new KeyValuePair<Type, object>(IHttpUpgradeFeatureType, this as global::Microsoft.AspNet.Http.Features.IHttpUpgradeFeature);
}
if ((_featureOverridenFlags & flagIHttpWebSocketFeature) == 0L)
{
yield return new KeyValuePair<Type, object>(IHttpWebSocketFeatureType, this as global::Microsoft.AspNet.Http.Features.IHttpWebSocketFeature);
}
if ((_featureOverridenFlags & flagISessionFeature) == 0L)
{
yield return new KeyValuePair<Type, object>(ISessionFeatureType, this as global::Microsoft.AspNet.Http.Features.ISessionFeature);
} }
if (_currentIHttpUpgradeFeature != null) if (_currentIHttpUpgradeFeature != null)
{ {

View File

@ -25,26 +25,40 @@ namespace Microsoft.AspNet.Server.Kestrel.GeneratedCode
public static string GeneratedFile() public static string GeneratedFile()
{ {
var commonFeatures = new[] var alwaysFeatures = new[]
{ {
typeof(IHttpRequestFeature), typeof(IHttpRequestFeature),
typeof(IHttpResponseFeature), typeof(IHttpResponseFeature),
typeof(IHttpRequestIdentifierFeature), typeof(IHttpRequestIdentifierFeature),
typeof(IHttpSendFileFeature),
typeof(IServiceProvidersFeature), typeof(IServiceProvidersFeature),
typeof(IHttpAuthenticationFeature),
typeof(IHttpRequestLifetimeFeature), typeof(IHttpRequestLifetimeFeature),
typeof(IHttpConnectionFeature)
};
var commonFeatures = new[]
{
typeof(IHttpAuthenticationFeature),
typeof(IQueryFeature), typeof(IQueryFeature),
typeof(IFormFeature), typeof(IFormFeature)
};
var sometimesFeatures = new[]
{
typeof(IHttpUpgradeFeature),
typeof(IResponseCookiesFeature), typeof(IResponseCookiesFeature),
typeof(IItemsFeature), typeof(IItemsFeature),
typeof(IHttpConnectionFeature),
typeof(ITlsConnectionFeature), typeof(ITlsConnectionFeature),
typeof(IHttpUpgradeFeature),
typeof(IHttpWebSocketFeature), typeof(IHttpWebSocketFeature),
typeof(ISessionFeature), typeof(ISessionFeature)
}; };
var rareFeatures = new[]
{
typeof(IHttpSendFileFeature)
};
var allFeatures = alwaysFeatures.Concat(commonFeatures).Concat(sometimesFeatures).Concat(rareFeatures);
// NOTE: This list MUST always match the set of feature interfaces implemented by Frame. // NOTE: This list MUST always match the set of feature interfaces implemented by Frame.
// See also: src/Microsoft.AspNet.Server.Kestrel/Http/Frame.FeatureCollection.cs // See also: src/Microsoft.AspNet.Server.Kestrel/Http/Frame.FeatureCollection.cs
var implementedFeatures = new[] var implementedFeatures = new[]
@ -53,7 +67,7 @@ namespace Microsoft.AspNet.Server.Kestrel.GeneratedCode
typeof(IHttpResponseFeature), typeof(IHttpResponseFeature),
typeof(IHttpUpgradeFeature), typeof(IHttpUpgradeFeature),
}; };
return $@" return $@"
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -69,7 +83,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
private void FastReset() private void FastReset()
{{{Each(implementedFeatures, feature => $@" {{{Each(implementedFeatures, feature => $@"
_current{feature.Name} = this;")} _current{feature.Name} = this;")}
{Each(allFeatures.Where( f => !implementedFeatures.Contains(f)), feature => $@" {Each(allFeatures.Where(f => !implementedFeatures.Contains(f)), feature => $@"
_current{feature.Name} = null;")} _current{feature.Name} = null;")}
}} }}
@ -79,7 +93,6 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
{{ {{
return _current{feature.Name}; return _current{feature.Name};
}}")} }}")}
return ExtraFeatureGet(key); return ExtraFeatureGet(key);
}} }}
@ -101,6 +114,7 @@ namespace Microsoft.AspNet.Server.Kestrel.Http
{{ {{
yield return new KeyValuePair<Type, object>({feature.Name}Type, _current{feature.Name} as global::{feature.FullName}); yield return new KeyValuePair<Type, object>({feature.Name}Type, _current{feature.Name} as global::{feature.FullName});
}}")} }}")}
if (MaybeExtra != null) if (MaybeExtra != null)
{{ {{
foreach(var item in MaybeExtra) foreach(var item in MaybeExtra)