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

View File

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