From f32addd40840b1ae2c482951b6d3c7ace13d458b Mon Sep 17 00:00:00 2001 From: pan-wang Date: Wed, 7 Mar 2018 11:45:51 -0800 Subject: [PATCH] Update RecycleApplication function (#634) removing hostingmodel input from recycleapplication call and fix memory leak in recycle out of process application --- src/AspNetCore/Inc/applicationinfo.h | 6 ------ src/AspNetCore/Inc/applicationmanager.h | 3 +-- src/AspNetCore/Src/applicationinfo.cpp | 2 +- src/AspNetCore/Src/applicationmanager.cxx | 15 ++++++++------- 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/AspNetCore/Inc/applicationinfo.h b/src/AspNetCore/Inc/applicationinfo.h index cb75e34066..7be36427f2 100644 --- a/src/AspNetCore/Inc/applicationinfo.h +++ b/src/AspNetCore/Inc/applicationinfo.h @@ -142,12 +142,6 @@ public: pApplication->DereferenceApplication(); } - VOID - ClearApplication() - { - m_pApplication = NULL; - } - HRESULT EnsureApplicationCreated(); diff --git a/src/AspNetCore/Inc/applicationmanager.h b/src/AspNetCore/Inc/applicationmanager.h index 11cfe04c67..cf5a11d31c 100644 --- a/src/AspNetCore/Inc/applicationmanager.h +++ b/src/AspNetCore/Inc/applicationmanager.h @@ -58,8 +58,7 @@ public: static VOID RecycleApplication( - _In_ APPLICATION_INFO * pEntry, - _In_ APP_HOSTING_MODEL hostingModel + _In_ APPLICATION_INFO * pEntry ); static diff --git a/src/AspNetCore/Src/applicationinfo.cpp b/src/AspNetCore/Src/applicationinfo.cpp index ac1551af3e..71f511ad15 100644 --- a/src/AspNetCore/Src/applicationinfo.cpp +++ b/src/AspNetCore/Src/applicationinfo.cpp @@ -174,7 +174,7 @@ APPLICATION_INFO::UpdateAppOfflineFileHandle() strEventMsg.QueryStr()); } - APPLICATION_MANAGER::RecycleApplication(this, m_pConfiguration->QueryHostingModel()); + APPLICATION_MANAGER::RecycleApplication(this); } } diff --git a/src/AspNetCore/Src/applicationmanager.cxx b/src/AspNetCore/Src/applicationmanager.cxx index 233908c10f..beee7456ed 100644 --- a/src/AspNetCore/Src/applicationmanager.cxx +++ b/src/AspNetCore/Src/applicationmanager.cxx @@ -370,7 +370,7 @@ APPLICATION_MANAGER::RecycleApplicationFromManager( DBG_ASSERT(pRecord != NULL); // RecycleApplication is called on a separate thread. - RecycleApplication(pRecord, m_hostingModel); + RecycleApplication(pRecord); pRecord->DereferenceApplicationInfo(); path = context.MultiSz.Next(path); } @@ -480,19 +480,21 @@ APPLICATION_MANAGER::DoRecycleApplication( // static VOID APPLICATION_MANAGER::RecycleApplication( - _In_ APPLICATION_INFO * pEntry, - _In_ APP_HOSTING_MODEL hostingModel + _In_ APPLICATION_INFO * pEntry ) { - APPLICATION* pApplication = pEntry->QueryApplication(); + DBG_ASSERT(pApplication != NULL); // Reference the application first pApplication->ReferenceApplication(); - if (hostingModel == APP_HOSTING_MODEL::HOSTING_OUT_PROCESS) + if (pApplication->QueryConfig()->QueryHostingModel() == HOSTING_OUT_PROCESS) { - pEntry->ClearApplication(); + // Need to set m_pApplication to NULL first + // to avoid mapping new request to the recycled application + // A new application instance will be created for new request + pEntry->ClearAndDereferenceApplication(); } // Reset application pointer to NULL @@ -505,6 +507,5 @@ APPLICATION_MANAGER::RecycleApplication( 0, // default creation flags NULL); // receive thread identifier - CloseHandle(hThread); }