Merge pull request #22833 from dotnet-maestro-bot/merge/release/3.1-to-master
[automated] Merge branch 'release/3.1' => 'master'
This commit is contained in:
commit
62e6d93f5c
|
|
@ -112,7 +112,7 @@ IN_PROCESS_HANDLER::NotifyDisconnect()
|
|||
|
||||
if (pManagedHttpContext != nullptr)
|
||||
{
|
||||
m_pDisconnectHandler(m_pManagedHttpContext);
|
||||
m_pDisconnectHandler(pManagedHttpContext);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -139,14 +139,17 @@ IN_PROCESS_HANDLER::SetManagedHttpContext(
|
|||
PVOID pManagedHttpContext
|
||||
)
|
||||
{
|
||||
bool disconnectFired = false;
|
||||
|
||||
{
|
||||
SRWExclusiveLock lock(m_srwDisconnectLock);
|
||||
m_pManagedHttpContext = pManagedHttpContext;
|
||||
disconnectFired = m_disconnectFired;
|
||||
}
|
||||
|
||||
if (m_disconnectFired && m_pManagedHttpContext != nullptr)
|
||||
if (disconnectFired && pManagedHttpContext != nullptr)
|
||||
{
|
||||
m_pDisconnectHandler(m_pManagedHttpContext);
|
||||
m_pDisconnectHandler(pManagedHttpContext);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -121,70 +121,76 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
|
|||
|
||||
protected void InitializeContext()
|
||||
{
|
||||
_thisHandle = GCHandle.Alloc(this);
|
||||
|
||||
Method = GetVerb();
|
||||
|
||||
RawTarget = GetRawUrl();
|
||||
// TODO version is slow.
|
||||
HttpVersion = GetVersion();
|
||||
Scheme = SslStatus != SslStatus.Insecure ? Constants.HttpsScheme : Constants.HttpScheme;
|
||||
KnownMethod = VerbId;
|
||||
StatusCode = 200;
|
||||
|
||||
var originalPath = GetOriginalPath();
|
||||
|
||||
if (KnownMethod == HttpApiTypes.HTTP_VERB.HttpVerbOPTIONS && string.Equals(RawTarget, "*", StringComparison.Ordinal))
|
||||
// create a memory barrier between initialize and disconnect to prevent a possible
|
||||
// NullRef with disconnect being called before these fields have been written
|
||||
// disconnect aquires this lock as well
|
||||
lock (_abortLock)
|
||||
{
|
||||
PathBase = string.Empty;
|
||||
Path = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Path and pathbase are unescaped by RequestUriBuilder
|
||||
// The UsePathBase middleware will modify the pathbase and path correctly
|
||||
PathBase = string.Empty;
|
||||
Path = originalPath;
|
||||
}
|
||||
_thisHandle = GCHandle.Alloc(this);
|
||||
|
||||
var cookedUrl = GetCookedUrl();
|
||||
QueryString = cookedUrl.GetQueryString() ?? string.Empty;
|
||||
Method = GetVerb();
|
||||
|
||||
RequestHeaders = new RequestHeaders(this);
|
||||
HttpResponseHeaders = new HeaderCollection();
|
||||
ResponseHeaders = HttpResponseHeaders;
|
||||
RawTarget = GetRawUrl();
|
||||
// TODO version is slow.
|
||||
HttpVersion = GetVersion();
|
||||
Scheme = SslStatus != SslStatus.Insecure ? Constants.HttpsScheme : Constants.HttpScheme;
|
||||
KnownMethod = VerbId;
|
||||
StatusCode = 200;
|
||||
|
||||
if (_options.ForwardWindowsAuthentication)
|
||||
{
|
||||
WindowsUser = GetWindowsPrincipal();
|
||||
if (_options.AutomaticAuthentication)
|
||||
var originalPath = GetOriginalPath();
|
||||
|
||||
if (KnownMethod == HttpApiTypes.HTTP_VERB.HttpVerbOPTIONS && string.Equals(RawTarget, "*", StringComparison.Ordinal))
|
||||
{
|
||||
User = WindowsUser;
|
||||
PathBase = string.Empty;
|
||||
Path = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Path and pathbase are unescaped by RequestUriBuilder
|
||||
// The UsePathBase middleware will modify the pathbase and path correctly
|
||||
PathBase = string.Empty;
|
||||
Path = originalPath;
|
||||
}
|
||||
|
||||
var cookedUrl = GetCookedUrl();
|
||||
QueryString = cookedUrl.GetQueryString() ?? string.Empty;
|
||||
|
||||
RequestHeaders = new RequestHeaders(this);
|
||||
HttpResponseHeaders = new HeaderCollection();
|
||||
ResponseHeaders = HttpResponseHeaders;
|
||||
|
||||
if (_options.ForwardWindowsAuthentication)
|
||||
{
|
||||
WindowsUser = GetWindowsPrincipal();
|
||||
if (_options.AutomaticAuthentication)
|
||||
{
|
||||
User = WindowsUser;
|
||||
}
|
||||
}
|
||||
|
||||
MaxRequestBodySize = _options.MaxRequestBodySize;
|
||||
|
||||
ResetFeatureCollection();
|
||||
|
||||
if (!_server.IsWebSocketAvailable(_pInProcessHandler))
|
||||
{
|
||||
_currentIHttpUpgradeFeature = null;
|
||||
}
|
||||
|
||||
_streams = new Streams(this);
|
||||
|
||||
(RequestBody, ResponseBody) = _streams.Start();
|
||||
|
||||
var pipe = new Pipe(
|
||||
new PipeOptions(
|
||||
_memoryPool,
|
||||
readerScheduler: PipeScheduler.ThreadPool,
|
||||
pauseWriterThreshold: PauseWriterThreshold,
|
||||
resumeWriterThreshold: ResumeWriterTheshold,
|
||||
minimumSegmentSize: MinAllocBufferSize));
|
||||
_bodyOutput = new OutputProducer(pipe);
|
||||
}
|
||||
|
||||
MaxRequestBodySize = _options.MaxRequestBodySize;
|
||||
|
||||
ResetFeatureCollection();
|
||||
|
||||
if (!_server.IsWebSocketAvailable(_pInProcessHandler))
|
||||
{
|
||||
_currentIHttpUpgradeFeature = null;
|
||||
}
|
||||
|
||||
_streams = new Streams(this);
|
||||
|
||||
(RequestBody, ResponseBody) = _streams.Start();
|
||||
|
||||
var pipe = new Pipe(
|
||||
new PipeOptions(
|
||||
_memoryPool,
|
||||
readerScheduler: PipeScheduler.ThreadPool,
|
||||
pauseWriterThreshold: PauseWriterThreshold,
|
||||
resumeWriterThreshold: ResumeWriterTheshold,
|
||||
minimumSegmentSize: MinAllocBufferSize));
|
||||
_bodyOutput = new OutputProducer(pipe);
|
||||
|
||||
NativeMethods.HttpSetManagedContext(_pInProcessHandler, (IntPtr)_thisHandle);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
|
|||
try
|
||||
{
|
||||
context = (IISHttpContext)GCHandle.FromIntPtr(pvManagedHttpContext).Target;
|
||||
context.AbortIO(clientDisconnect: true);
|
||||
context?.AbortIO(clientDisconnect: true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
|
@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Server.IIS.Core
|
|||
try
|
||||
{
|
||||
context = (IISHttpContext)GCHandle.FromIntPtr(pvManagedHttpContext).Target;
|
||||
context.OnAsyncCompletion(hr, bytes);
|
||||
context?.OnAsyncCompletion(hr, bytes);
|
||||
return NativeMethods.REQUEST_NOTIFICATION_STATUS.RQ_NOTIFICATION_PENDING;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
|
|||
Loading…
Reference in New Issue