fixing a stress issue (#619)

This commit is contained in:
pan-wang 2018-03-02 17:34:09 -08:00 committed by GitHub
parent f954e9548b
commit cbffeb33ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 25 deletions

View File

@ -61,11 +61,7 @@ FORWARDING_HANDLER::~FORWARDING_HANDLER(
//
DBG_ASSERT(m_pDisconnect == NULL);
if (m_pDisconnect != NULL)
{
m_pDisconnect->ResetHandler();
m_pDisconnect = NULL;
}
RemoveRequest();
FreeResponseBuffers();
@ -313,16 +309,8 @@ FORWARDING_HANDLER::OnExecuteRequestHandler()
Failure:
m_RequestStatus = FORWARDER_DONE;
//disbale client disconnect callback
if (m_pDisconnect != NULL)
{
if (fHandleSet)
{
m_pDisconnect->ResetHandler();
}
m_pDisconnect->CleanupStoredContext();
m_pDisconnect = NULL;
}
//disable client disconnect callback
RemoveRequest();
pResponse->DisableKernelCache();
pResponse->GetRawHttpResponse()->EntityChunkCount = 0;
@ -538,11 +526,7 @@ Failure:
m_RequestStatus = FORWARDER_DONE;
//disbale client disconnect callback
if (m_pDisconnect != NULL)
{
m_pDisconnect->ResetHandler();
m_pDisconnect = NULL;
}
RemoveRequest();
//
// Do the right thing based on where the error originated from.
@ -1506,11 +1490,7 @@ Finished:
if (m_RequestStatus == FORWARDER_DONE)
{
//disbale client disconnect callback
if (m_pDisconnect != NULL)
{
m_pDisconnect->ResetHandler();
m_pDisconnect = NULL;
}
RemoveRequest();
if (m_hRequest != NULL)
{
@ -2598,6 +2578,20 @@ SetCookie:
return S_OK;
}
VOID
FORWARDING_HANDLER::RemoveRequest(
VOID
)
{
ASYNC_DISCONNECT_CONTEXT * pDisconnect;
pDisconnect = (ASYNC_DISCONNECT_CONTEXT *)InterlockedExchangePointer((PVOID*)&m_pDisconnect, NULL);
if (pDisconnect != NULL)
{
pDisconnect->ResetHandler();
pDisconnect = NULL;
}
}
VOID
FORWARDING_HANDLER::TerminateRequest(
bool fClientInitiated

View File

@ -157,6 +157,11 @@ private:
_Inout_ DWORD * pcchHeaders
);
VOID
RemoveRequest(
VOID
);
DWORD m_Signature;
//
// WinHTTP request handle is protected using a read-write lock.